LA 4255 Guess

痛定思痛。 2021-12-13 23:21 210阅读 0赞

题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2256

题意:给定一串数字a1,a2….an,给出sij的正负数值。sij代表ai+…aj的大小。求一组结果满足此条件。-10<=ai<=10.

思路:

设:Bi = a1+ a2 + … ai,则,我们可以求出Bj和Bi-1的大小关系。可以由大到小连一条有向边,对此有向图做拓扑排序。

拓扑排序的做法如下:我们规定节点初始值:Bk =0(这只是一个相对值,事实上我们求的ai是Bi与Bi-1的差值,所以Bi初始是什么都没有关系,我们求得是相对差).

如果Bi 向Bj有一条有向边,那么Bi>Bj,说明Bi至少比Bj大1,我们用v[k]记录Bk的值,不断调整此数值。最终就能求得一组解。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <vector>
  4. #include <queue>
  5. #include <iostream>
  6. using namespace std;
  7. #define Maxn 20
  8. vector<int> g[Maxn];
  9. int indeg[Maxn],v[Maxn];
  10. int n;
  11. void init()
  12. {
  13. for(int i=0;i<Maxn;i++)
  14. {
  15. g[i].clear();
  16. indeg[i] = 0;
  17. v[i] = 0;
  18. }
  19. }
  20. void toposort()
  21. {
  22. queue<int> q;
  23. for(int i=0;i<=n;i++)
  24. {
  25. if(indeg[i] == 0) q.push(i);
  26. }
  27. while(!q.empty())
  28. {
  29. int s = q.front();
  30. q.pop();
  31. for(int i=0;i<g[s].size();i++)
  32. {
  33. int t = g[s][i];
  34. v[t] = min(v[t],v[s]-1);
  35. if(--indeg[t] == 0)
  36. {
  37. q.push(t);
  38. }
  39. }
  40. }
  41. }
  42. void output()
  43. {
  44. for(int i=1;i<=n;i++)
  45. {
  46. if(i!=n) printf("%d ",v[i]-v[i-1]);
  47. else printf("%d\n",v[i]-v[i-1]);
  48. }
  49. }
  50. int main()
  51. {
  52. #ifndef ONLINE_JUDGE
  53. freopen("in.txt","r",stdin);
  54. #endif
  55. int t;
  56. char str[20];
  57. scanf(" %d",&t);
  58. while(t--)
  59. {
  60. init();
  61. scanf(" %d",&n);
  62. scanf("%s",str);
  63. for(int i=1,p=0;i<=n;i++)
  64. {
  65. for(int j=i;j<=n;j++,p++)
  66. {
  67. if(str[p] == '-')
  68. {
  69. g[i-1].push_back(j);
  70. indeg[j]++;
  71. }
  72. else if(str[p] == '+')
  73. {
  74. g[j].push_back(i-1);
  75. indeg[i-1]++;
  76. }
  77. }
  78. }
  79. toposort();
  80. output();
  81. }
  82. return 0;
  83. }

转载于:https://www.cnblogs.com/james1207/p/3366084.html

发表评论

表情:
评论列表 (有 0 条评论,210人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LA3708 墓地雕塑

    题意: 有N个墓碑,等距离的分布在一个圆形墓地的周围,然后又要添加m个墓碑,最后要求所有的墓碑还是等距离,添加的墓碑可以放在任意位置,问之前的N个墓碑的最少移动距离之

    相关 LB和LA

    观点1: 1. ha lb 软件的优点与缺点? 两个本来就不是一路的,应该不好比较优缺点。 从目的上来说: ha的目的是不中断服务,lb的目的是为了提高接入能力,

    相关 LA 3458——Bridge

    题意: 建设一座大桥,在桥上建若干个塔,塔高为H,相邻两塔间的距离不能超过D,桥长度为B,线的总长度为L,桥之间的绳索为对称抛物线,问建最少塔的时候的线索的最下端的离地高度y

    相关 uva 1612——Guess

    题意:有n个选手参加比赛,比赛有3个题目,每个选手每个题目都有一个评测之前的于得分,当通过题目时才可以得到相应分数,否则为0,然后按照得分排名,id小的排在前面,现在

    相关 LB和LA

    观点1: 1. ha lb 软件的优点与缺点? 两个本来就不是一路的,应该不好比较优缺点。 从目的上来说: ha的目的是不中断服务,lb的目的是为了提高接入能力,

    相关 LB和LA

    观点1: 1. ha lb 软件的优点与缺点? 两个本来就不是一路的,应该不好比较优缺点。 从目的上来说: ha的目的是不中断服务,lb的目的是为了提高接入能力,