当前位置:   article > 正文

(部分)河南萌新联赛2024第(二)场:南阳理工学院

(部分)河南萌新联赛2024第(二)场:南阳理工学院

目录

A-国际旅行Ⅰ

C-小w和大W的决斗

D-A*BBBB

F-水灵灵的小学弟

G-lxy的通风报信

H-狼狼的备忘录

I-重生之zbk要拿回属于他的一切


A-国际旅行Ⅰ

思路:签到题,排序后按题意输出即可

  1. void solve()
  2. {
  3. int n,m,q;
  4. std::cin>>n>>m>>q;
  5. std::vector<int>a(n+1,0);
  6. for(int i=1;i<=n;i++) std::cin>>a[i];
  7. for(int i=1;i<=m;i++)
  8. {
  9. int u,v;
  10. std::cin>>u>>v;
  11. }
  12. std::sort(a.begin()+1, a.end());
  13. while (q--)
  14. {
  15. int x;
  16. std::cin>>x;
  17. std::cout<<a[x]<<'\n';
  18. }
  19. }

C-小w和大W的决斗

思路:打表找规律

  1. void solve()
  2. {
  3. int n;
  4. std::cin>>n;
  5. std::vector<int>a(n,0);
  6. for(auto &x:a) std::cin>>x;
  7. auto sg=[&](int x)->int
  8. {
  9. if(x%8==0) return x-1;
  10. if(x%8==7) return x+1;
  11. return x;
  12. };
  13. i64 res=0;
  14. for(auto x:a) res^=sg(x);
  15. std::cout<<(res?"w win\n":"W win\n");
  16. }

D-A*BBBB

思路:优化后的高精度

  1. void solve()
  2. {
  3. std::string a, b;
  4. std::cin >> a >> b;
  5. reverse(a.begin(), a.end());
  6. i64 cur = 0, cur2 = 0;
  7. std::string ans="";
  8. for (int i = 0; i < sz(a) + sz(b); i++)
  9. {
  10. if (i < sz(a)) cur += a[i] - '0';
  11. if (i - (int) sz(b) >= 0 && i - sz(b) < sz(a)) cur -= a[i - sz(b)] - '0';
  12. cur2 += cur * (b[0] - '0');
  13. ans.push_back(cur2 % 10 + '0');
  14. cur2 /= 10;
  15. }
  16. while (sz(ans) > 1 && ans.back() == '0') ans.pop_back();
  17. reverse(ans.begin(), ans.end());
  18. std::cout << ans << '\n';
  19. }

F-水灵灵的小学弟

思路:输出DHY即可,赛时没认真看,以为是原神和DHY在玩,一直在推,真是玩原神玩的QAQ

G-lxy的通风报信

思路:用bfs求出每个军队之间的距离,用Kruskal跑一下最小生成树即可

  1. void solve()
  2. {
  3. int n,m;
  4. std::cin>>n>>m;
  5. std::vector<std::string>g(n,"");
  6. for(auto &&x:g) std::cin>>x;
  7. std::vector<std::pair<int,int>>a;
  8. for(int i=0;i<n;i++)
  9. for(int j=0;j<m;j++)
  10. if(g[i][j]=='*')
  11. a.eb(i,j);
  12. std::map<std::PII,int>mp;
  13. int cnt=0;
  14. for(auto &&x:a) mp[x]=++cnt;
  15. DSU dsu(cnt);
  16. std::vector<std::vector<int>> v(cnt+1,std::vector<int>(cnt+1,0));
  17. auto bfs=[&](int x,int y)
  18. {
  19. std::queue<std::PII>q;
  20. std::vector<std::vector<bool>>vis(n,std::vector<bool>(m,0));
  21. std::vector<std::vector<int>>dis(n,std::vector<int>(m,0));
  22. int id=mp[{x,y}];
  23. q.push({x,y});
  24. dis[x][y]=0;
  25. while (sz(q))
  26. {
  27. auto &&[x,y]=q.front();
  28. q.pop();
  29. vis[x][y]=1;
  30. for(int i=0;i<4;i++)
  31. {
  32. int xx=x+dx[i],yy=y+dy[i];
  33. if(xx<0||xx>=n||yy<0||yy>=m||vis[xx][yy]||g[xx][yy]=='#') continue;
  34. dis[xx][yy]=dis[x][y]+1;
  35. vis[xx][yy]=1;
  36. q.push({xx,yy});
  37. }
  38. }
  39. for(auto &&[x,y]:a)
  40. {
  41. int idx=mp[{x,y}];
  42. if(idx==id) continue;
  43. v[idx][id]=dis[x][y];
  44. }
  45. };
  46. for(int i=0;i<n;i++)
  47. for(int j=0;j<m;j++)
  48. if(g[i][j]=='*')
  49. bfs(i,j);
  50. std::vector<std::array<int,3>>e;
  51. for(int i=1;i<=cnt;i++)
  52. {
  53. for(int j=1;j<=cnt;j++)
  54. {
  55. if(i==j) continue;
  56. if(!v[i][j])
  57. {
  58. std::cout<<"No\n";
  59. return;
  60. }
  61. e.pb({v[i][j],i,j});
  62. }
  63. }
  64. std::sort(e.begin(), e.end());
  65. i64 res=0;
  66. for(auto &&[w,x,y]:e)
  67. {
  68. if(dsu.same(x,y)) continue;
  69. res+=w;
  70. dsu.merge(x,y);
  71. }
  72. if(dsu.cnt>1) std::cout<<"No\n";
  73. else std::cout<<res<<'\n';
  74. }

H-狼狼的备忘录

思路:用stl暴力乱搞即可

  1. void solve()
  2. {
  3. int n;
  4. std::cin>>n;
  5. std::map<std::string,std::set<std::string>>mp;
  6. for(int i=0;i<n;i++)
  7. {
  8. std::string s;
  9. int m;
  10. std::cin>>s>>m;
  11. auto &v=mp[s];
  12. while (m--)
  13. {
  14. std::string ss;
  15. std::cin>>ss;
  16. v.insert(ss);
  17. }
  18. }
  19. // for(auto [k,v]:mp)
  20. // {
  21. // std::out(k)<<' ';
  22. // for(auto kk:v)
  23. // std::out(kk);
  24. // std::cout<<'\n';
  25. // }
  26. std::cout<<sz(mp)<<'\n';
  27. for(auto &[k,v]:mp)
  28. {
  29. std::cout<<k;
  30. auto v1=std::vector<std::string_view>(v.begin(), v.end());
  31. std::vector<bool> vis(sz(v1),0);
  32. std::vector<std::string_view>res;
  33. for(int i=0;i<sz(v1);i++)
  34. {
  35. for(int j=0;j<sz(v1);j++)
  36. {
  37. if(i!=j && sz(v1[i])<sz(v1[j]) && v1[i]==v1[j].substr(sz(v1[j])- sz(v1[i])))
  38. {
  39. vis[i]=1;
  40. break;
  41. }
  42. }
  43. if(!vis[i]) res.eb(v1[i]);
  44. }
  45. std::cout<<' '<<sz(res);
  46. for(auto && kk:res)
  47. std::cout<<' '<<kk;
  48. std::cout<<'\n';
  49. }
  50. }

I-重生之zbk要拿回属于他的一切

思路:按题意模拟即可

  1. void solve()
  2. {
  3. int n;
  4. std::cin>>n;
  5. std::string s;
  6. std::cin>>s;
  7. int res=0;
  8. for(int i=0;i+4<sz(s);i++)
  9. {
  10. if(s[i]=='c'&&s[i+1]=='h'&&s[i+2]=='u'&&s[i+3]=='a'&&s[i+4]=='n')
  11. res++;
  12. }
  13. std::cout<<res<<'\n';
  14. }

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

闽ICP备14008679号