• Educational Codeforces Round 129 (Rated for Div. 2)


    这一场算新手友好场,至少我这个新手还是比较舒服的.

    A. Game with Cards

    Problem - A - CodeforcesCodeforces. Programming competitions and contests, programming communityhttps://codeforces.com/contest/1681/problem/A签到,谁手里的最大牌最大谁赢.

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. const int N =5e5+10,mod=998244353;
    4. void solve()
    5. {
    6. int maxxa=-1,maxxb=-1;
    7. int n,m,x;
    8. scanf("%d",&n);
    9. for(int i=1;i<=n;i++)
    10. {
    11. scanf("%d",&x);
    12. maxxa=max(maxxa,x);
    13. }
    14. scanf("%d",&m);
    15. for(int i=1;i<=m;i++)
    16. {
    17. scanf("%d",&x);
    18. maxxb=max(maxxb,x);
    19. }
    20. if(maxxa>=maxxb)
    21. {
    22. printf("Alice\n");
    23. }
    24. else
    25. {
    26. printf("Bob\n");
    27. }
    28. if(maxxa<=maxxb)
    29. {
    30. printf("Bob\n");
    31. }
    32. else
    33. {
    34. printf("Alice\n");
    35. }
    36. }
    37. signed main()
    38. {
    39. int t;
    40. cin>>t;
    41. while(t--)
    42. solve();
    43. return 0;
    44. }

    B. Card Trick

    Problem - B - Codeforcesicon-default.png?t=M5H6https://codeforces.com/contest/1681/problem/B题意:有n张牌,每张牌都有自己的值,m次操作,每次把顶部b[i]张牌放到底部去.问最后顶上牌是什么

    思路:最近的一场abc的c题

    C - Rotationicon-default.png?t=M5H6https://atcoder.jp/contests/abc258/tasks/abc258_c

    我写的思路和这个差不多.这个题更加简单,直接在每次交换后记录他们的起始位置即可.最后输出该位置的牌.

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. const int N =5e5+10,mod=998244353;
    4. int a[200005];
    5. void solve()
    6. {
    7. int x,n,m,st=0;
    8. scanf("%d",&n);
    9. for(int i=0;i<n;i++)
    10. scanf("%d",&a[i]);
    11. scanf("%d",&m);
    12. for(int i=0;i<m;i++)
    13. {
    14. scanf("%d",&x);
    15. st=(st+x)%n;
    16. }
    17. printf("%d\n",a[st]);
    18. return ;
    19. }
    20. signed main()
    21. {
    22. int t;
    23. cin>>t;
    24. while(t--)
    25. solve();
    26. return 0;
    27. }

    C. Double Sort

    Problem - C - Codeforcesicon-default.png?t=M5H6https://codeforces.com/contest/1681/problem/C题意:给你两个数组a,b,每次可以选择i,j,将a[i]与a[j]还有b[i]与b[j]进行交换,问是否可以把它们都交换成非递减顺序的数组,如果可以输出交换的次数和交换的每一步的i和j.

    思路:先将两个数组看排序后能不能排序成立.再直接冒泡排序模拟即可.冒泡排序的时间复杂度是小于n方的,不会超出限制.

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. struct node
    4. {
    5. int a,b,id;
    6. }edge[105];
    7. struct node1
    8. {
    9. int x,y;
    10. };
    11. bool cmp(node a,node b)
    12. {
    13. if(a.a!=b.a)
    14. return a.a<b.a;
    15. else
    16. return a.b<b.b;
    17. }
    18. stack<node1>qu;
    19. void solve()
    20. {
    21. int n;
    22. scanf("%d",&n);
    23. for(int i=1;i<=n;i++)
    24. {
    25. scanf("%d",&edge[i].a);
    26. }
    27. for(int i=1;i<=n;i++)
    28. {
    29. scanf("%d",&edge[i].b);
    30. edge[i].id=i;
    31. }
    32. sort(edge+1,edge+1+n,cmp);
    33. for(int i=1;i<n;i++)
    34. {
    35. if(edge[i].b>edge[i+1].b)
    36. {
    37. printf("-1\n");
    38. return ;
    39. }
    40. }
    41. for(int i=1;i<=n;i++)//n个数的数列总共扫描n-1次
    42. {
    43. for(int j=1;j<=n-i;j++)//每一趟扫描到a[n-i-2]与a[n-i-1]比较为止结束
    44. {
    45. if(edge[j].id>edge[j+1].id)//后一位数比前一位数小的话,就交换两个数的位置(升序)
    46. {
    47. node t;
    48. t=edge[j+1];
    49. edge[j+1]=edge[j];
    50. edge[j]=t;
    51. qu.push({j,j+1});
    52. }
    53. }
    54. }
    55. printf("%d\n",qu.size());
    56. while(qu.size())
    57. {
    58. node1 temp=qu.top();
    59. qu.pop();
    60. printf("%d %d\n",temp.x,temp.y);
    61. }
    62. return ;
    63. }
    64. signed main()
    65. {
    66. int t;
    67. cin>>t;
    68. while(t--)
    69. solve();
    70. return 0;
    71. }

    D. Required Length

    题意:给你一个n和x,我们每次可以选择x中某一位的数z,然后让x=x*z.问最少几步能够到数位等于n.

    思路:直接搜索即可.稍微需要剪枝,map标记已经搜索的状态,然后每次不去数位上的0或者1即可.

    1. #include<bits/stdc++.h>
    2. #define int long long
    3. using namespace std;
    4. int n,x,ans=1e18;
    5. map<int,int>ma;
    6. struct node
    7. {
    8. int x,step;
    9. };
    10. void bfs()
    11. {
    12. queue<node>qu;
    13. qu.push({x,0});
    14. ma[x]=1;
    15. while(qu.size())
    16. {
    17. node bef=qu.front();
    18. qu.pop();
    19. int xx=bef.x;
    20. string s=to_string(xx);
    21. if(s.size()==n)
    22. {
    23. ans=min(ans,bef.step);
    24. continue;
    25. }
    26. for(int i=0;i<s.size();i++)
    27. {
    28. int cnt=s[i]-'0';
    29. if(cnt!=0&&cnt!=1&&ma[cnt*xx]==0)
    30. {
    31. qu.push({xx*cnt,bef.step+1});
    32. ma[xx*cnt]=1;
    33. }
    34. }
    35. }
    36. return ;
    37. }
    38. void solve()
    39. {
    40. ma.clear();
    41. ans=1e18;
    42. cin>>n>>x;
    43. set<int>s;
    44. int t=x;
    45. while(t)
    46. {
    47. s.insert(t%10);
    48. t/=10;
    49. }
    50. set<int>::iterator i;
    51. int f=0;
    52. for(i=s.begin();i!=s.end();i++)
    53. {
    54. int tt=*i;
    55. if(tt!=1&&tt!=0)
    56. {
    57. f=1;
    58. }
    59. }
    60. if(f==0)
    61. {
    62. cout<<"-1\n";
    63. return ;
    64. }
    65. bfs();
    66. cout<<ans<<"\n";
    67. return ;
    68. }
    69. signed main()
    70. {
    71. solve();
    72. return 0;
    73. }

  • 相关阅读:
    生活空间中,餐桌该如何选择?福州中宅装饰,福州装修
    用HTML+CSS+JS写的切水果小游戏它来了
    Authing 获得 ISO/IEC 20000-1 服务管理体系和信息安全管理体系认证
    Windows如何启动MySQL
    Ubuntu系统迁移
    rabbitmq资料汇总
    纳米二氧化硅/分解酶/聚己内酯复合微球/银纳米颗粒修饰二氧化硅微球SERS基底的应用
    多个 .NET Core SDK 版本之间进行切换 global.json
    麒麟信安助力金风科技走全国产化自主创新之路,加快能源结构转型升级
    测试架构工程师需要具备哪些能力 ?
  • 原文地址:https://blog.csdn.net/qq_49593247/article/details/125595542