• AtCoder Beginner Contest 350


    A - Past ABCs

    简单的枚举判断即可

    1. #include "bits/stdc++.h"
    2. using namespace std;
    3. #define int long long
    4. #define endl '\n'
    5. #define IOS ios::sync_with_stdio(0),cin.tie(0);
    6. #define all(x) x.begin(),x.end()
    7. #define pi pair<int,int>
    8. #define vi vector<int>
    9. #define si set<int>
    10. #define mi map<int,int>
    11. #define mc map<char,int>
    12. #define YES cout<<"Yes"<<endl;
    13. #define NO cout<<"No"<<endl;
    14. template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
    15. template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
    16. void solve()
    17. {
    18. string s;
    19. cin>>s;
    20. int sum=0;
    21. for (int i=3;i<6;i++){
    22. sum=sum*10+(s[i]-'0');
    23. }
    24. string s1=s.substr(0,3);
    25. if(s1=="ABC" && sum>=1 && sum<=349 && sum!=316){
    26. YES
    27. }
    28. else {
    29. NO
    30. }
    31. }
    32. signed main()
    33. {
    34. IOS
    35. int t;
    36. t=1;//cin>>t;
    37. while(t--){
    38. solve();
    39. }
    40. }

    B - Dentist Aoki

    如果一个洞奇数次进,则总数加一偶数次进总数减一。

    1. #include "bits/stdc++.h"
    2. using namespace std;
    3. #define int long long
    4. #define endl '\n'
    5. #define IOS ios::sync_with_stdio(0),cin.tie(0);
    6. #define all(x) x.begin(),x.end()
    7. #define pi pair<int,int>
    8. #define vi vector<int>
    9. #define si set<int>
    10. #define mi map<int,int>
    11. #define mc map<char,int>
    12. #define YES cout<<"Yes"<<endl;
    13. #define NO cout<<"No"<<endl;
    14. template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
    15. template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
    16. void solve()
    17. {
    18. int n,q;
    19. cin>>n>>q;
    20. int sum=n;
    21. vector<int> a(n+1,1);
    22. for (int i=1;i<=q;i++){
    23. int x;
    24. cin>>x;
    25. if(a[x]==1){
    26. a[x]=0;
    27. sum--;
    28. }
    29. else {
    30. a[x]=1;
    31. sum++;
    32. }
    33. }
    34. cout<<sum;
    35. }
    36. signed main()
    37. {
    38. IOS
    39. int t;
    40. t=1;//cin>>t;
    41. while(t--){
    42. solve();
    43. }
    44. }

    C - Sort 

    先用一个数组记录第几个输入的数字,然后一个数组记录这个数字的位置,

    然后再按照排列从小到大的顺序遍历,如果这个数不在相对应的位置上就和其需要到的位置上的数交换 。时间复杂度(n).

    1. #include "bits/stdc++.h"
    2. using namespace std;
    3. #define int long long
    4. #define endl '\n'
    5. #define IOS ios::sync_with_stdio(0),cin.tie(0);
    6. #define all(x) x.begin(),x.end()
    7. #define pi pair<int,int>
    8. #define vi vector<int>
    9. #define si set<int>
    10. #define mi map<int,int>
    11. #define mc map<char,int>
    12. #define YES cout<<"Yes"<<endl;
    13. #define NO cout<<"No"<<endl;
    14. template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
    15. template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
    16. void solve()
    17. {
    18. int n;
    19. cin>>n;
    20. vi a(n+1);
    21. vi b(n+1);
    22. for (int i=1;i<=n;i++){
    23. cin>>a[i];
    24. b[a[i]]=i;
    25. }
    26. int cnt=0;
    27. vector<pi> v;
    28. for (int i=1;i<=n;i++){
    29. if(b[i]!=i){
    30. int j=b[i];
    31. swap(a[i],a[j]);
    32. swap(b[a[i]],b[a[j]]);
    33. v.push_back({i,j});
    34. }
    35. }
    36. cout<<(int)v.size()<<endl;
    37. for (int i=0;i<(int)v.size();i++){
    38. auto [x,y]=v[i];
    39. cout<<x<<" "<<y<<endl;
    40. }
    41. }
    42. signed main()
    43. {
    44. IOS
    45. int t;
    46. t=1;//cin>>t;
    47. while(t--){
    48. solve();
    49. }
    50. }

    D - New Friends

    这题考察联通块的知识,每个联通块内都可以有(cnt)*(cnt-1)/2条边。

    这题可以用两种做法:

    1.图论

    因为存在一个点被联通块内多个点连接的情况,所以每次先加上边,最后除以2.

    1. #include "bits/stdc++.h"
    2. using namespace std;
    3. #define int long long
    4. #define endl '\n'
    5. #define IOS ios::sync_with_stdio(0),cin.tie(0);
    6. #define all(x) x.begin(),x.end()
    7. #define pi pair<int,int>
    8. #define vi vector<int>
    9. #define si set<int>
    10. #define mi map<int,int>
    11. #define mc map<char,int>
    12. #define YES cout<<"Yes"<<endl;
    13. #define NO cout<<"No"<<endl;
    14. template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
    15. template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
    16. int vis[200010];
    17. void solve()
    18. {
    19. int n,m;
    20. cin>>n>>m;
    21. vector<vector<int>> v(n+1);
    22. for (int i=1;i<=m;i++){
    23. int x,y;
    24. cin>>x>>y;
    25. v[x].push_back(y);
    26. v[y].push_back(x);
    27. }
    28. int ans=0;
    29. for (int i=1;i<=n;i++){
    30. if(vis[i]){
    31. continue;
    32. }
    33. queue<int> q;
    34. q.push(i);
    35. vis[i]=1;
    36. int cnt1=1,cnt2=0;
    37. while(q.size()){
    38. int u=q.front();
    39. q.pop();
    40. for (auto x : v[u]){
    41. cnt2++;
    42. if(vis[x]==0){
    43. vis[x]=1;
    44. cnt1++;
    45. q.push(x);
    46. }
    47. }
    48. }
    49. ans+=cnt1*(cnt1-1)-cnt2;
    50. }
    51. ans/=2;
    52. cout<<ans;
    53. }
    54. signed main()
    55. {
    56. IOS
    57. int t;
    58. t=1;//cin>>t;
    59. while(t--){
    60. solve();
    61. }
    62. }

    2.并查集

    1. #include "bits/stdc++.h"
    2. using namespace std;
    3. #define int long long
    4. #define endl '\n'
    5. #define IOS ios::sync_with_stdio(0),cin.tie(0);
    6. #define all(x) x.begin(),x.end()
    7. #define pi pair<int,int>
    8. #define vi vector<int>
    9. #define si set<int>
    10. #define mi map<int,int>
    11. #define mc map<char,int>
    12. #define YES cout<<"Yes"<<endl;
    13. #define NO cout<<"No"<<endl;
    14. template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
    15. template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
    16. int p[200010],cnt[200010];
    17. int find(int x)
    18. {
    19. if(p[x]!=x) p[x]=find(p[x]);
    20. return p[x];
    21. }
    22. void solve()
    23. {
    24. int n,m;
    25. cin>>n>>m;
    26. iota(p+1,p+n+1,1);
    27. for (int i=1;i<=m;i++){
    28. int x,y;
    29. cin>>x>>y;
    30. p[find(x)]=find(y);
    31. }
    32. int ans=-m;
    33. for (int i=1;i<=n;i++){
    34. cnt[find(i)]++;
    35. }
    36. for (int i=1;i<=n;i++){
    37. ans+=cnt[i]*(cnt[i]-1)/2;
    38. }
    39. cout<<ans;
    40. }
    41. signed main()
    42. {
    43. IOS
    44. int t;
    45. t=1;//cin>>t;
    46. while(t--){
    47. solve();
    48. }
    49. }

    E - Toward 0

    mp[n]是n的期望花费。

    cost1=mp[n/a]+x。  

    cost2=" role="presentation">1~6 mp[n/i] / 6 + y  当i=1时 两边有相同的式子,把它移到左边。

    cost2=26imp[n/i]/5+65y" role="presentation">26imp[n/i]/5+65y 

    1. #define int long long
    2. #define endl '\n'
    3. #define IOS ios::sync_with_stdio(0),cin.tie(0);
    4. #define all(x) x.begin(),x.end()
    5. #define pi pair<int,int>
    6. #define vi vector<int>
    7. #define si set<int>
    8. #define mi map<int,int>
    9. #define mc map<char,int>
    10. #define YES cout<<"Yes"<<endl;
    11. #define NO cout<<"No"<<endl;
    12. template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return true; } return false; }
    13. template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return true; } return false; }
    14. void solve()
    15. {
    16. int n,a,x,y;
    17. cin>>n>>a>>x>>y;
    18. map<int,double> mp;
    19. auto dfs=[&](auto dfs,int u)-> double{
    20. if(u==0){
    21. return 0;
    22. }
    23. if(mp.find(u)!=mp.end()){
    24. return mp[u];
    25. }
    26. double cost1=dfs(dfs,u/a)+x;
    27. double cost2=0;
    28. for (int i=2;i<=6;i++){
    29. cost2+=dfs(dfs,u/i);
    30. }
    31. cost2=cost2/5+1.0*y*6/5;
    32. return mp[u]=min(cost1,cost2);
    33. };
    34. dfs(dfs,n);
    35. cout<<fixed<<setprecision(10)<<mp[n];
    36. }
    37. signed main()
    38. {
    39. IOS
    40. int t;
    41. t=1;//cin>>t;
    42. while(t--){
    43. solve();
    44. }
    45. }

  • 相关阅读:
    LeetCode 144. 二叉树的前序遍历
    linux文件的隐藏属性、特殊属性和ACL权限
    Flink快速入门
    Java中的值传递与引用传递 含面试题
    Docker笔记-09 Docker Compose
    C++入门笔记
    [附源码]Python计算机毕业设计SSM开放实验室管理系统(程序+LW)
    【AI】《动手学-深度学习-PyTorch版》笔记(二十):图像增强、微调
    Shell特殊变量(Shell $#、$*、$@、$?、$$)的使用
    mysql中GROUP_CONCAT函数详解
  • 原文地址:https://blog.csdn.net/yrhuadonghui/article/details/138039453