ID name  status one word
 POJ 5437 Alisha’s Party 赛后AC、 优先队列,模拟。对时间t排序
POJ 5438 Ponds 赛后AC 循环链表
POJ 5439 Aggregated Counting    
POJ 5440 Clock Adjusting    
POJ 5441 Travel 赛后AC 并查集+离线化。注音可以休息、
POJ 5442 Favorite Donut    
POJ 5443 The Water Problem 题如其名,水题。 ..........就是水。
POJ 5444 Elven Postman 赛后AC 二叉树建和遍历。
POJ 5445 Food Problem    
POJ 5446 Unknown Treasure    
POJ 5447 Good Numbers    
POJ 5448 Marisa’s Cake    
POJ 5449 Robot Dog    

很多题就是想不到思路。其实是可以做的。第一场只过了1道。。。。。。。。。人艰不拆。。。。。。

poj 5437

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <iostream>
  4. #include <algorithm>
  5. #include <queue>
  6. using namespace std;
  7.  
  8. struct Node {
  9. char name[];
  10. int val;
  11. int t;
  12. bool operator < (const Node &a) const {
  13. if (a.val != val)
  14. return a.val > val;
  15. else return a.t < t;
  16. }
  17. }node[];
  18.  
  19. struct Open {
  20. int t, per;
  21. }open[];
  22.  
  23. bool cmp(Open a, Open b) {
  24. return a.t < b.t;
  25. }
  26.  
  27. Node rem[];
  28. priority_queue<Node>que;
  29.  
  30. int main() {
  31. int k, m, q;
  32. int t;
  33. scanf("%d", &t);
  34. while (t--) {
  35. memset(open, , sizeof(open));
  36. memset(rem, , sizeof(rem));
  37. scanf("%d%d%d", &k, &m, &q);
  38. for (int i=; i<k; ++i) {
  39. scanf("%s%d", node[i].name, &node[i].val);
  40. node[i].t = i;
  41. }
  42.  
  43. for (int i=; i<m; ++i) {
  44. scanf("%d%d", &open[i].t, &open[i].per);
  45. }
  46. while (!que.empty()) {
  47. que.pop();
  48. }
  49. sort(open, open+m, cmp);
  50.  
  51. int cnt = ;
  52. int t = ;
  53. for (int i=; i<m; ++i) {
  54. if (t < open[i].t) {
  55. for (int j=t; j < open[i].t; ++j) {
  56. que.push(node[j]);
  57. }
  58. t = open[i].t;
  59. }
  60. int num = ;
  61. while(num < open[i].per && !que.empty() && cnt < k) {
  62. rem[cnt++] = que.top();
  63. num++;
  64. que.pop();
  65. }
  66. }
  67.  
  68. if (open[m-].t < k) {
  69. for (int i=open[m-].t; i<k; ++i) {
  70. que.push(node[i]);
  71. }
  72. }
  73.  
  74. while(!que.empty() && cnt < k) {
  75. rem[cnt++] = que.top();
  76. que.pop();
  77. }
  78.  
  79. int a;
  80. for (int i=; i<q; ++i) {
  81. scanf("%d", &a);
  82. if (i == )
  83. printf("%s", rem[a-].name);
  84. else printf(" %s", rem[a-].name);
  85. }
  86. printf("\n");
  87. }
  88. return ;
  89. }

poj 5438

  1. #include <queue>
  2. #include <stdio.h>
  3. #include <iostream>
  4. #include <algorithm>
  5. #include <string.h>
  6. using namespace std;
  7.  
  8. #define maxn 100000+50 // 边的个数
  9. #define maxm 10000+50 // 节点个数
  10. int t, p, m, a, b;
  11.  
  12. int val[maxm];
  13. int head[maxm];
  14. int deg[maxm];
  15. bool vis[maxm];
  16. long long ans, temp;
  17. int num;
  18.  
  19. struct Edge {
  20. int v, next;
  21. }edge[maxn];
  22.  
  23. int totEdge;
  24. queue<int>que;
  25.  
  26. void addEdge(int a, int b) {
  27. edge[totEdge].v = b;
  28. edge[totEdge].next = head[a];
  29. head[a] = totEdge++;
  30. }
  31.  
  32. void init() {
  33. memset(head, -, sizeof(head));
  34. memset(edge, , sizeof(edge));
  35. memset(val, , sizeof(val));
  36. memset(vis, , sizeof(vis));
  37. memset(deg, , sizeof(deg));
  38. totEdge = ;
  39. ans = ;
  40. while(!que.empty())
  41. que.pop();
  42. }
  43.  
  44. void topSort() {
  45. for (int i=; i<=p; ++i) {
  46. if (deg[i] == )
  47. vis[i] = true;
  48. if (deg[i] == ) {
  49. vis[i] = true;
  50. que.push(i);
  51. }
  52. }
  53.  
  54. while(!que.empty()) {
  55. int top = que.front();
  56. //cout << top << "===\n";
  57. que.pop();
  58. for (int i=head[top]; i!=-; i=edge[i].next) {
  59. int v = edge[i].v;
  60. //cout << v << "----\n";
  61. deg[v]--;
  62. if (!vis[v]) {
  63. if (deg[v] == )
  64. vis[v] = true;
  65. else if (deg[v] == ) {
  66. vis[v] = true;
  67. que.push(v);
  68. }
  69. }
  70. }
  71. //cout << "***\n";
  72. }
  73. }
  74.  
  75. void Dfs(int u, int fa) {
  76. // cout << val[u] << "===" << u << endl;;
  77. num += ;
  78. temp += val[u];
  79. vis[u] = true;
  80. for (int i=head[u]; i!=-; i=edge[i].next) {
  81. int v = edge[i].v;
  82. if (!vis[v] && v != fa) {
  83. Dfs(v, u); // u开头的这条链上的最后一个子节点,如果是u ,就说明到环的开始了。
  84. }
  85. }
  86. }
  87.  
  88. int main() {
  89. cin >> t;
  90. while (t--) {
  91. init();
  92. cin >> p >> m;
  93.  
  94. for (int i=; i<=p; ++i) {
  95. cin >> val[i];
  96. }
  97.  
  98. for (int i=; i<m; ++i) {
  99. cin >> a >> b;
  100. addEdge(a, b);
  101. addEdge(b, a);
  102. deg[a]++;
  103. deg[b]++;
  104. }
  105. topSort();
  106. for (int i=; i<=p; ++i) {
  107. num = ;
  108. temp = ;
  109. if (!vis[i])
  110. Dfs(i, );
  111. if (num & ) {
  112. ans += temp;
  113. }
  114. }
  115. cout << ans << endl;
  116. }
  117. return ;
  118. }

poj 5441

  1. // 先对边按权值排序,然后对询问按照权值排序。
  2. // 每次在满足当前条件下,遍历。把两个端点所在的集合
  3. // 并起来。此时增加的pair数就是2*num1*num2.
  4. // 因为已经对询问按照权值排序。所以后面的集合一定会覆盖前面的、
  5. // 所以只要一直询问下去。记录就可以了。
  6. // 有一点并查集离线查询的地方。
  7.  
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <iostream>
  11. #include <algorithm>
  12. using namespace std;
  13.  
  14. #define maxn 201000 // 节点数
  15. #define maxm 51000 // 询问数
  16. #define tot 1001000 // 边数
  17.  
  18. int t, n, m, q;
  19. int num[maxn]; // 维护每个节点当前所在集合的节点个数、
  20. int ans[maxm]; // 保存每次询问的结果、
  21. int fa[maxn]; // 并查集
  22.  
  23. struct Node {
  24. int st, ed, dis;
  25. }node[tot];
  26.  
  27. int cmp(Node a, Node b) {
  28. return a.dis < b.dis;
  29. }
  30.  
  31. struct Querry{
  32. int id, ask;
  33. }que[maxm];
  34.  
  35. void init() {
  36. for (int i=; i<=n; ++i) {
  37. fa[i] = i;
  38. num[i] = ;
  39. }
  40. memset(ans, , sizeof(ans));
  41. }
  42.  
  43. int cmp2(Querry a, Querry b) {
  44. return a.ask < b.ask;
  45. }
  46.  
  47. int find_(int i) {
  48. if (fa[i] == i) return i;
  49. else return fa[i] = find_(fa[i]);
  50. }
  51.  
  52. int main() {
  53. int a, b, d;
  54. scanf("%d", &t);
  55. while (t--) {
  56. scanf("%d%d%d", &n, &m, &q);
  57. init();
  58. for (int i=; i<=m; ++i) {
  59. scanf("%d%d%d", &a, &b, &d);
  60. node[i].st = a;
  61. node[i].ed = b;
  62. node[i].dis = d;
  63. }
  64. sort(node+, node++m, cmp);
  65. for (int i=; i<q; ++i) {
  66. scanf("%d", &que[i].ask);
  67. que[i].id = i+;
  68. }
  69. sort(que, que+q, cmp2);
  70.  
  71. int now = ;
  72. int tempans = ;
  73. int flag = ;
  74.  
  75. for (int i=; i<q; ++i) {
  76. flag = que[i].id;
  77. for(; node[now].dis<=que[i].ask && now<=m; now++) {
  78. int t1 = node[now].st;
  79. int t2 = node[now].ed;
  80. if (t1 == t2) {
  81. continue;
  82. }
  83. if (find_(t1) == find_(t2)) {
  84. continue;
  85. }
  86. else if (find_(t1) != find_(t2)) {
  87. tempans += *num[find_(t1)]*num[find_(t2)];
  88. num[find_(t1)] += num[find_(t2)];
  89. fa[find_(t2)] = find_(t1);
  90. }
  91. }
  92. ans[flag] += tempans;
  93. }
  94. for (int i=; i<=q; ++i) {
  95. printf("%d\n", ans[i]);
  96. }
  97. }
  98. return ;
  99. }

poj 5444

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. struct Tree {
  7. int l, r;
  8. }node[];
  9.  
  10. bool flag;
  11.  
  12. void init() {
  13. memset(node, , sizeof(node));
  14. }
  15.  
  16. void addNode(int u, int c) {
  17. if (node[u].l== && u<c) {node[u].l = c;return;}
  18. else if (node[u].r== && u>c) {node[u].r = c;return;}
  19. else if (u<c) addNode(node[u].l, c);
  20. else addNode(node[u].r, c);
  21. }
  22.  
  23. void find(int u, int c) {
  24. if (u == c)
  25. return;
  26. else if (u<c) {
  27. cout << 'W';
  28. find(node[u].l, c);
  29. }
  30. else if (u > c) {
  31. cout << 'E';
  32. find(node[u].r, c);
  33. }
  34. }
  35.  
  36. int main() {
  37. int t, n, q, r, c;
  38. cin >> t;
  39. while(t--) {
  40. init();
  41. cin >> n;
  42. cin >> r;
  43. node[r].l = node[r].r = ;
  44.  
  45. for (int i=; i<n; ++i) {
  46. cin >> c;
  47. addNode(r, c);
  48. }
  49. cin >> q;
  50. for (int i=; i<q; ++i) {
  51. flag = true;
  52. cin >> c;
  53. find(r, c);
  54. cout << endl;
  55. }
  56. }
  57. return ;
  58. }

15年-ICPC长春-网络赛的更多相关文章

  1. 2013 ACM/ICPC 长春网络赛E题

    题意:给出一个字符串,要从头.尾和中间找出三个完全相等的子串,这些串覆盖的区间互相不能有重叠部分.头.尾的串即为整个字符串的前缀和后缀.问这个相同的子串的最大长度是多少. 分析:利用KMP算法中的ne ...

  2. 2013 ACM/ICPC 长春网络赛F题

    题意:两个人轮流说数字,第一个人可以说区间[1~k]中的一个,之后每次每人都可以说一个比前一个人所说数字大一点的数字,相邻两次数字只差在区间[1~k].谁先>=N,谁输.问最后是第一个人赢还是第 ...

  3. hdu 4762 && 2013 ACM/ICPC 长春网络赛解题报告

    这次的答案是猜出来的,如果做得话应该是应该是一个几何概型的数学题: 答案就是:n/(m^(n-1)); 具体的证明过程: 1.首先枚举这M个点中的的两个端点,概率是:n*(n-1); 2.假设这个蛋糕 ...

  4. hdu 4763 && 2013 ACM/ICPC 长春网络赛解题报告

    一个KMP的简单题 不过好久没用过这个东东了,今天写的时候花了很多时间: 只需要花点时间判断下所有的元素都相同的的情况就行了! #include<cstdio> #include<c ...

  5. HDU 4763 Theme Section (2013长春网络赛1005,KMP)

    Theme Section Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  6. HDU 4764 Stone (2013长春网络赛,水博弈)

    Stone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. HDU 4762 Cut the Cake (2013长春网络赛1004题,公式题)

    Cut the Cake Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  8. HDU 4759 Poker Shuffle(2013长春网络赛1001题)

    Poker Shuffle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  9. HDU 4768 Flyer (2013长春网络赛1010题,二分)

    Flyer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

随机推荐

  1. 微信小程序——2、配置json文件

    配置文件详解 主配置文件app.json 主配置文件位于主目录中,用于进行全局配置.包括页面文件的路径.窗口表现.设置网络超时时间.设置多tab等 下面通过微信最初自带小程序来学习 { "p ...

  2. C++类的静态成员变量初始化 Win32 API 定时器使用

    1.类的静态成员变量 .h 类声明入下 class A { public: static int x; }; .cpp文件 这样初始化. ; 2.定时器使用 1.SetTimer(HWND,UINT, ...

  3. List集合实现简易学生管理

    题目: 代码: package org.wlgzs; import java.util.ArrayList; import java.util.List; import java.util.Scann ...

  4. 判断一个String中是否有指定字符或字符串

    String test=“qwer”; if (test.contains("个we")){ do; }

  5. Linux deepin 中Jetbrain Idea等软件中文显示异常

    解决方案:安装常用的中文字体 # 文鼎宋体[推荐] sudo apt install fonts-arphic-uming # 文鼎楷体[推荐] sudo apt install fonts-arph ...

  6. 【镜像地址】Maven地址列表

    1.国内OSChina提供的镜像,非常不错 <mirror> <id>CN</id> <name>OSChina Central</name> ...

  7. java的基本数据类型默认值

    这里就举int类型 默认值在类实例化,也就是对象中才有默认值0,或者是静态变量. 1.先看局部变量使用(不行,报错) 2.静态变量 3.类非静态属性

  8. UVa 1395 苗条的生成树(Kruskal+并查集)

    https://vjudge.net/problem/UVA-1395 题意: 给出一个n结点的图,求苗条度(最大边减最小边的值)尽量小的生成树. 思路: 主要还是克鲁斯卡尔算法,先仍是按权值排序,对 ...

  9. 机器学习-数据可视化神器matplotlib学习之路(四)

    今天画一下3D图像,首先的另外引用一个包 from mpl_toolkits.mplot3d import Axes3D,接下来画一个球体,首先来看看球体的参数方程吧 (0≤θ≤2π,0≤φ≤π) 然 ...

  10. Vhost.conf 范例

    NameVirtualHost *:80 <VirtualHost *:80> ServerName haofei.com DocumentRoot "E:/test/" ...