当前位置:   article > 正文

Atcoder 287 题解(A-D)_a - tcdr atcoder

a - tcdr atcoder

A - Majority

题意:现在有N个人和一个建议,每个人给我们一个字符串,每个字符串都是For(赞同)或者Against(反对),让我们求出最后大多数人们是反对还是赞同我们的建议。

简单题直接枚举一下赞同和反对的总数,最后进行比较一下就行

代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n;
  4. int a, b;
  5. int main()
  6. {
  7. cin >> n;
  8. while (n--)
  9. {
  10. string str;
  11. cin >> str;
  12. if (str == "For")
  13. a++;
  14. if (str == "Against")
  15. b++;
  16. }
  17. if (a > b)
  18. puts("Yes");
  19. else
  20. puts("No");
  21. return 0;
  22. }

B - Postal Card 

题意:

给我们一个n和m,接着给我们n个字符串长度为6的字符串(只包含数字)Si(1<i<n),接下来还会给我们m个长度为3的字符串(只包含数字)Ti(1<i<m),他让我们区数一下有多少个Si的后三个数字和Ti的数一一对应,并输出这个个数

我一看string就直接用string写了,实际上我们可以使用int类型去存储那个数,直接去做就行

代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 1010;
  4. int n, m;
  5. int s[N];
  6. map<int,int> t;
  7. map<string, int> mp;
  8. void solve1()//使用字符串去做,稍微有点麻烦
  9. {
  10. cin >> n >> m;
  11. string s[N], p[N];
  12. for (int i = 0; i < n; i++)
  13. cin >> s[i];
  14. for (int i = 0; i < m; i++)
  15. {
  16. cin >> p[i];
  17. mp[p[i]]++;//将后三个数字存储一下,一会和s字符串相匹配
  18. }
  19. int res = 0;
  20. for (int i = 0; i < n; i++)
  21. {
  22. string str;
  23. str = s[i].substr(3, 6);//取出si字符串的后三位
  24. if (mp[str] >= 1)
  25. res++;
  26. }
  27. cout << res << endl;
  28. }
  29. void solve2()
  30. {
  31. cin >> n >> m;
  32. for (int i = 0; i < n; i++)
  33. cin >> s[i];
  34. for (int j = 0, x; j < m; j++)//同上
  35. {
  36. cin >> x;
  37. t[x]++;
  38. }
  39. int res = 0;
  40. for (int i = 0; i < n; i++)
  41. if (t[s[i] % 1000] >= 1)//如果这个后三位在t数组中出现过,答案++
  42. res++;
  43. cout << res << endl;
  44. }
  45. int main()
  46. {
  47. solve();
  48. return 0;
  49. }

C - Path Graph? 

 题意:

给我们一个无向图,有n个顶点,m条边,让我们判断一下当前的这个无向图是否为路径图

路径图:

1.M=N-1(大家可以想一下为什么)

2.连通图(所有的点都是连同的)

3.每个点的度数小于等于2(换句话来说就是每个点至多和两个点相连接)

第一个条件很好实现,第二个稍微麻烦一点,我们可以使用dfs或者bfs遍历一遍整个图,然后去找一下是否有点没有出现在我们的连通图中,如果有的话就说明我们的图连通的部分大于1个,或者使用并查集的算法去解决这个问题,不过这个好像在这次比赛结束后给卡了一下(我也不清楚为啥)最后一个我们可以使用vector存储图,最后遍历一下每个点就可以啦

代码如下(第一个是正确的,第二个不知道为啥后面又被hack了)

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 2e5 + 10;
  4. int n, m;
  5. void solve()
  6. {
  7. vector<vector<int>> map(n + 1);
  8. for (int i = 0; i < m; i++)
  9. {
  10. int a, b;
  11. cin >> a >> b;
  12. map[a].push_back(b);
  13. map[b].push_back(a);
  14. }
  15. if (m != n - 1)
  16. {
  17. cout << "No" << endl;
  18. return;
  19. }
  20. for (int i = 1; i <= n; i++) //每个点的度数都得小于等于2
  21. if (map[i].size() > 2)
  22. {
  23. cout << "No" << endl;
  24. return;
  25. }
  26. // dfs遍历图
  27. vector<bool> s(n + 1); //遍历连通图,看一下是否存在不在一个连通图的点
  28. //即判断当前的图的连通度是否为1
  29. queue<int> q;
  30. s[1] = true;
  31. q.push(1);
  32. while (!q.empty())
  33. {
  34. int x = q.front();
  35. q.pop();
  36. for (int v : map[x])
  37. {
  38. if (!s[v])
  39. {
  40. s[v] = true;
  41. q.push(v);
  42. }
  43. }
  44. }
  45. for (int i = 1; i <= n; i++)
  46. {
  47. if (!s[i])
  48. {
  49. cout << "No" << endl;
  50. return;
  51. }
  52. }
  53. cout << "Yes" << endl;
  54. }
  55. int main()
  56. {
  57. cin >> n >> m;
  58. solve();
  59. return 0;
  60. }

第二份代码:(现在已经叫不上了)

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 2e5 + 10;
  4. int n, m;
  5. int p[N];
  6. int find(int x) //并查集算法!!
  7. {
  8. if (x != p[x])
  9. p[x] = find(p[x]);
  10. return p[x];
  11. }
  12. void solve()
  13. {
  14. cin >> n >> m;
  15. for (int i = 1; i < n; i++)
  16. p[i] = i;
  17. int cnt = n, flag = 0;
  18. for (int i = 0; i < m; i++)
  19. {
  20. int a, b;
  21. cin >> a >> b;
  22. a = find(a);
  23. b = find(b);
  24. if (a != b)
  25. {
  26. p[a] = b;
  27. cnt--;
  28. }
  29. if (a == b)//自环的情况
  30. flag = 1;
  31. }
  32. if (flag || cnt != 1)
  33. cout << "No" << endl;
  34. else
  35. cout << "Yes" << endl;
  36. }
  37. int main()
  38. {
  39. solve();
  40. return 0;
  41. }

希望这篇题解对您的学习有帮助,有任何问题都可以私信我

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/74428
推荐阅读
相关标签
  

闽ICP备14008679号