• 2022年ccpc威海站


    这一套题将会是我本学期刷的最后一套题,明天就要打icpc西安站了,打完就滚去准备六级和期末考试了,希望自己明天的比赛能够顺利!

    A. Dunai

    题目链接:Problem - A - Codeforces

     样例输入:

    1. 11
    2. skiter Nine 33 Saksa Sneyking
    3. Yatoro TORONTOTOKYO Collapse Mira Miposhka
    4. ana Topson Ceb JerAx N0tail
    5. ana Topson Ceb JerAx N0tail
    6. MATUMBAMAN Miracle MinDContRoL GH KuroKy
    7. shadow bLink Faithbian iceice y
    8. Fear SumaiL UNiVeRsE Aui2000 ppd
    9. Hao Mu xiao8 Banana SanSheng
    10. Loda s4 AdmiralBulldog EGM Akke
    11. Zhou Ferrari430 YYF ChuaN Faith
    12. ArtStyle Dendi XBOCT LighTofHeaveN Puppey
    13. 100
    14. Ame 1
    15. NothingToSay 2
    16. Faithbian 3
    17. XinQ 4
    18. y 5
    19. Yuragi 1
    20. bzm 2
    21. ATF 3
    22. Taiga 4
    23. Misha 5
    24. Yatoro 1
    25. TORONTOTOKYO 2
    26. Collapse 3
    27. Mira 4
    28. Miposhka 5
    29. K1 1
    30. ChrisLuck 2
    31. Wisper 3
    32. Gojira 4
    33. Stinger 5
    34. Monet 1
    35. Ori 2
    36. Xxs 3
    37. BoBoKa 4
    38. SiameseC 5
    39. Pakazs 1
    40. DarkMago 2
    41. Sacred 3
    42. Matthew 4
    43. Pandaboo 5
    44. JaCkky 1
    45. Yopaj 2
    46. Fbz 3
    47. TIMS 4
    48. skem 5
    49. Timado 1
    50. Bryle 2
    51. SabeRLight 3
    52. MoonMeander 4
    53. DuBu 5
    54. skiter 1
    55. Nine 2
    56. 33 3
    57. Saksa 4
    58. Sneyking 5
    59. dyrachyo 1
    60. BOOM 2
    61. Ace 3
    62. tOfu 4
    63. Seleri 5
    64. Arteezy 1
    65. Abed 2
    66. Nightfall 3
    67. Cr1t 4
    68. Fly 5
    69. Raven 1
    70. Armel 2
    71. Jabz 3
    72. DJ 4
    73. Jaunuel 5
    74. YawaR 1
    75. Quinn 2
    76. LESLAO 3
    77. MSS 4
    78. Fata 5
    79. Lumiere 1
    80. 4nalog 2
    81. Vitaly 3
    82. Thiolicor 4
    83. Gardick 5
    84. Pure 1
    85. Stormstormer 2
    86. Tobi 3
    87. Kataomi 4
    88. Fishman 5
    89. Daxak 1
    90. Larl 2
    91. Noticed 3
    92. RodjER 4
    93. SoNNeikO 5
    94. Ghost 1
    95. Somnus 2
    96. Chalice 3
    97. kaka 4
    98. xNova 5
    99. 23savage 1
    100. Mikoto 2
    101. kpii 3
    102. Q 4
    103. Hyde 5
    104. Crystallis 1
    105. Nisha 2
    106. Resolut1on 3
    107. Zayac 4
    108. Puppey 5
    109. MATUMBAMAN 1
    110. miCKe 2
    111. zai 3
    112. Boxi 4
    113. iNSaNiA 5

    样例输出:

    14
    

    题意:一开始给定一个n,代表有n组冠军队伍,每组队伍有5个人,每个人都有一个具体的位置(1~5),接下来输出我们要组队的名单,人数为m,接下来输出m个人,每个人包含名字和位置,我们要对他们进行组队,组队的条件就是每队中至少要有一个人获得过冠军,而且位于1~5的人各有一个,问我们最多能够组成几队。

    分析:我们直接统计一下待组队名单中的冠军人数,然后记录一下每个位置的人数,最后这六个值取一个最小值即可,因为冠军的位置可以随意进行调整,我们一开始不考虑每队中都要有冠军这个条件,尽可能按照位置进行组队,然后我们尽可能把冠军分散至不同的队伍中即可。需要注意的是冠军队伍中的人并不是都位于代组队的名单中。

    1. #include<cstdio>
    2. #include<iostream>
    3. #include<algorithm>
    4. #include<cstring>
    5. #include<map>
    6. #include<queue>
    7. #include<vector>
    8. #include<cmath>
    9. using namespace std;
    10. int main()
    11. {
    12. int n;
    13. cin>>n;
    14. map<string,int>mp;
    15. for(int i=1;i<=n;i++)
    16. for(int j=1;j<=5;j++)
    17. {
    18. string s;
    19. cin>>s;
    20. mp[s]=1;
    21. }
    22. int m;
    23. cin>>m;
    24. int cnt[10]={0};
    25. int count=0;
    26. for(int i=1;i<=m;i++)
    27. {
    28. string s;
    29. int p;
    30. cin>>s>>p;
    31. if(mp[s]) count++;
    32. cnt[p]++;
    33. }
    34. int ans=count;
    35. for(int i=1;i<=5;i++)
    36. ans=min(ans,cnt[i]);
    37. printf("%d",ans);
    38. return 0;
    39. }

    C. Grass

    题目链接:https://codeforces.com/gym/104023/problem/C

    样例输入: 

    1. 3
    2. 5
    3. 0 0
    4. 1 1
    5. 1 -1
    6. -1 1
    7. -1 -1
    8. 3
    9. 1 1
    10. 4 5
    11. 1 4
    12. 5
    13. 1 0
    14. 2 0
    15. 3 0
    16. 4 0
    17. 5 0

    样例输出:

    1. YES
    2. 0 0
    3. 1 1
    4. 1 -1
    5. -1 1
    6. -1 -1
    7. NO
    8. NO

    题意:给定n个点,找到一个拐点,然后再选择其余的四个点,使得从拐点到其余四个点的连边均没有交点。输出拐点及四个点,如果不存在则直接输出NO。

    分析:这个比较简单,我们直接判断一下是否n个点均共线即可知道是否存在这样的点。我们直接对给定的n个点进行遍历,从中找出5个不共线的点,然后暴力枚举符合题意的拐点即可。

    1. #include<cstdio>
    2. #include<iostream>
    3. #include<algorithm>
    4. #include<cstring>
    5. #include<map>
    6. #include<queue>
    7. #include<vector>
    8. #include<cmath>
    9. using namespace std;
    10. const int N=1e5+10;
    11. long long x[N],y[N];
    12. long long gcd(long long a,long long b)
    13. {
    14. if(!a) return b;
    15. return gcd(b%a,a);
    16. }
    17. int main()
    18. {
    19. int T;
    20. cin>>T;
    21. while(T--)
    22. {
    23. int n;
    24. scanf("%d",&n);
    25. for(int i=1;i<=n;i++)
    26. scanf("%lld%lld",&x[i],&y[i]);
    27. vector<int>ans;//存储满足题意的5个点坐标
    28. ans.push_back(1);ans.push_back(2);
    29. long long dx=x[2]-x[1],dy=y[2]-y[1];
    30. long long d=gcd(abs(dx),abs(dy));
    31. dx/=d;dy/=d;
    32. for(int i=3;i<=n;i++)
    33. {
    34. long long Dx=x[i]-x[1],Dy=y[i]-y[1];
    35. long long D=gcd(abs(Dx),abs(Dy));
    36. Dx/=D;Dy/=D;
    37. if(Dx==dx&&Dy==dy)
    38. {
    39. if(ans.size()<4) ans.push_back(i);
    40. continue;//同向共线
    41. }
    42. if(Dx==-dx&&Dy==-dy)
    43. {
    44. if(ans.size()<4) ans.push_back(i);
    45. continue;//反向共线
    46. }
    47. for(int j=i;j<=n&&ans.size()<5;j++)
    48. ans.push_back(j);
    49. break;
    50. }
    51. if(ans.size()<5) puts("NO");
    52. else
    53. {
    54. puts("YES");
    55. for(int i=0;i<5;i++)//枚举第i个点作为拐点
    56. {
    57. bool flag=true;
    58. map<pair<long long,long long>,int>mp;
    59. for(int j=0;j<5;j++)
    60. {
    61. if(j==i) continue;
    62. long long Dx=x[ans[i]]-x[ans[j]],Dy=y[ans[i]]-y[ans[j]];
    63. long long D=gcd(abs(Dx),abs(Dy));
    64. Dx/=D;Dy/=D;
    65. if(mp[{Dx,Dy}])
    66. {
    67. flag=false;
    68. break;
    69. }
    70. mp[{Dx,Dy}]=1;
    71. }
    72. if(flag)
    73. {
    74. printf("%lld %lld\n",x[ans[i]],y[ans[i]]);
    75. for(int j=0;j<5;j++)
    76. {
    77. if(j==i) continue;
    78. printf("%lld %lld\n",x[ans[j]],y[ans[j]]);
    79. }
    80. break;
    81. }
    82. }
    83. }
    84. }
    85. return 0;
    86. }

    E. Python Will be Faster than C++

    题目链接:Problem - E - Codeforces

     样例1输入:

    1. 10 1
    2. 11 45 14 19 19 8 10 13 10 8

    样例1输出:

    Python 3.14 will be faster than C++
    

    样例2输入:

    1. 10 1
    2. 2 2 2 2 2 2 2 2 2 2

    样例2输出:

    Python will never be faster than C++
    

    题意:给定n个数a1~an,再给定一个k,从第n+1个数开始有a[n+1]=max(2a[n]-a[n-1],0),问最少的m满足am

    分析:我们可以发现之后的点全部在n-1个点和第n个点形成的一条直线上,那么由于第n-1个点和第n个点都是大于k的,如果这条直线斜率不是负值,那么就不可能存在这样的m,否则我们直接按照斜率每次变化暴力求解即可。

    1. #include<cstdio>
    2. #include<iostream>
    3. #include<algorithm>
    4. #include<cstring>
    5. #include<map>
    6. #include<queue>
    7. #include<vector>
    8. #include<cmath>
    9. using namespace std;
    10. const int N=1e7+10;
    11. int a[N];
    12. int main()
    13. {
    14. int n,k;
    15. cin>>n>>k;
    16. for(int i=1;i<=n;i++)
    17. scanf("%d",&a[i]);
    18. if(a[n]>=a[n-1]) puts("Python will never be faster than C++");
    19. else
    20. {
    21. int kk=a[n]-a[n-1];
    22. for(int i=n+1;i;i++)
    23. {
    24. a[i]=a[i-1]+kk;
    25. if(a[i]<k)
    26. {
    27. printf("Python 3.%d will be faster than C++\n",i);
    28. break;
    29. }
    30. }
    31. }
    32. return 0;
    33. }

    G. Grade 2

    题目链接:Problem - G - Codeforces

    样例输入: 

    1. 15 2
    2. 1 4
    3. 11 4514

    样例输出:

    1. 2
    2. 2252

    题意:给定一个x和一个n,n代表询问次数,每次询问给定一个区间[l,r],需要给出下列表达式的值

     分析:一开始看到询问的范围是1e12,那么就猜测是有循环节的,通过打表发现gcd(kx^x,x)循环节长度为第一个大于等于x的2的幂次,那么我们直接暴力求解循环节即可,然后利用循环节进行简化计算。

    1. #include<cstdio>
    2. #include<iostream>
    3. #include<algorithm>
    4. #include<cstring>
    5. #include<map>
    6. #include<queue>
    7. #include<vector>
    8. #include<cmath>
    9. using namespace std;
    10. const int N=1e7+10;
    11. long long sum[N];
    12. long long circle=1;
    13. long long gcd(long long a,long long b)
    14. {
    15. if(!a) return b;
    16. return gcd(b%a,a);
    17. }
    18. long long cal(long long r)
    19. {
    20. return sum[circle]*(r/circle)+sum[r%circle];
    21. }
    22. int main()
    23. {
    24. long long x,n;
    25. cin>>x>>n;
    26. while(circle<x) circle<<=1;
    27. for(int i=1;i<=circle;i++)
    28. sum[i]=sum[i-1]+(gcd((x*i)^x,x)==1);
    29. while(n--)
    30. {
    31. long long l,r;
    32. scanf("%lld%lld",&l,&r);
    33. printf("%lld\n",cal(r)-cal(l-1));
    34. }
    35. return 0;
    36. }

    J. Eat, Sleep, Repeat

    题目链接:Problem - J - Codeforces

    样例输入: 

    1. 5
    2. 2 0
    3. 1 2
    4. 2 1
    5. 1 2
    6. 0 1
    7. 3 2
    8. 3 3 4
    9. 0 2
    10. 1 1
    11. 3 2
    12. 2 3 3
    13. 1 2
    14. 0 1
    15. 5 4
    16. 6 7 8 12 17
    17. 1 1
    18. 2 1
    19. 9 0
    20. 10 1

    样例输出:

    1. Pico
    2. FuuFuu
    3. Pico
    4. FuuFuu
    5. Pico

    题意:一开始给定n个数和m个限制,Pico和FuuFuu轮流对这n个数进行操作,每次操作都是选择n个数中的一个进行减1操作,每个限制给定一个x和y,代表操作过程中x的出现次数不能大于y,谁最后不能操作了谁就输掉了游戏,问谁最后会获胜。

    分析:通过分析一些样例不难发现,如果某个限制是x的出现次数不能超过0,那么一开始给定的数中大于x的数都不可能减小至x,而且这个时候如果对于数x+1的出现次数没有限制的话那么就可以把所有大于x的数降低至x+1(必须保证比x大的第一个限制为0的数是大于当前数的),如果x+1的出现次数是cnt的话,那么我们的最终结果应该是使得x+1的出现次数小于等于cnt,因为死局是当且仅当所有数都无法再进行操作,所以当且仅当所有数都到下限了才会进入死局。按照这个策略我们可以先按照限制次数为0的数进行分类,然后对于每个区间内的数都按照这个策略尽可能地使其值达到下限,最后计算一下操作次数,那么看一下总的操作次数是奇数还是偶数就可以知道是谁获胜了

    1. #include<cstdio>
    2. #include<iostream>
    3. #include<algorithm>
    4. #include<cstring>
    5. #include<map>
    6. #include<queue>
    7. #include<vector>
    8. #include<cmath>
    9. using namespace std;
    10. const int N=1e5+10;
    11. int a[N];
    12. struct node{
    13. int h,cnt;
    14. }p[N];
    15. bool cmp(node a,node b)
    16. {
    17. return a.h<b.h;
    18. }
    19. int st[N];
    20. int main()
    21. {
    22. int T;
    23. cin>>T;
    24. while(T--)
    25. {
    26. int n,m;
    27. scanf("%d%d",&n,&m);
    28. for(int i=1;i<=n;i++)
    29. scanf("%d",&a[i]);
    30. sort(a+1,a+n+1);
    31. map<int,int>mp;//mp[i]记录i的最大限制次数
    32. for(int i=1;i<=m;i++)
    33. {
    34. scanf("%d%d",&p[i].h,&p[i].cnt);
    35. mp[p[i].h]=p[i].cnt;
    36. }
    37. sort(p+1,p+m+1,cmp);
    38. int tt=0;
    39. st[++tt]=-1;
    40. for(int i=1;i<=m;i++)
    41. if(p[i].cnt==0) st[++tt]=p[i].h;
    42. st[++tt]=1e9+1;
    43. long long ans=0;
    44. for(int i=2;i<=tt;i++)
    45. {
    46. int l=lower_bound(a+1,a+n+1,st[i-1]+1)-a;
    47. int r=lower_bound(a+1,a+n+1,st[i])-a-1;
    48. int len=r-l+1;
    49. for(int i=l;i<=r;i++)
    50. ans+=a[i];
    51. for(int h=st[i-1]+1;len&&h<st[i];h++)
    52. {
    53. if(mp.count(h))
    54. {
    55. long long t=min(mp[h],len);
    56. len-=t;
    57. ans-=t*h;
    58. }
    59. else
    60. {
    61. ans-=len*h;
    62. len=0;
    63. }
    64. }
    65. }
    66. if(ans&1) puts("Pico");
    67. else puts("FuuFuu");
    68. }
    69. return 0;
    70. }

  • 相关阅读:
    《Terraform 101 从入门到实践》 Terraform在公有云Azure上的应用
    物联网开发笔记(52)- 使用Micropython开发ESP32开发板之多线程
    面向对象设计原则
    Helm3模板-内置函数和Values
    acw - 4623. 买糖果(思维,取模折半)
    Redis分布式缓存(三)| 哨兵集群原理、哨兵集群搭建、集群故障恢复、与SpringBoot集成
    FITC标记的STAT1-ASON,绿色荧光素标记STAT1反义寡核苷酸,FITC-STAT1-ASON
    python-2.变量和简单数据类型
    【华为OD机试真题 python】 跳格子【2022 Q4 | 200分】
    【动态库和静态库】
  • 原文地址:https://blog.csdn.net/AC__dream/article/details/127824542