当前位置:   article > 正文

Codeforces Round 884 (Div. 1 + Div. 2)A~D

Codeforces Round 884 (Div. 1 + Div. 2)A~D

A - Subtraction Game

题意:两个人轮流在n个石头中拿石头,只能拿a个或b个,不能拿则输,问让第二个人必胜的n

思路:直接输出a+b,不管第一个人那什么,都可以吧剩下的拿掉

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main() {
  4. int t,a,b;
  5. scanf("%d",&t);
  6. while (t--) {
  7. scanf("%d %d",&a,&b);
  8. printf("%d\n",a+b);
  9. }
  10. return 0;
  11. }

B - Permutations & Primes

题意:给出一个数n,让你构造一个1~n的排列,让这个排列中有最多的mex(a [ l ]~a [ r ])为素数的情况,(mex就是不在我这个范围内的最小正整数),首先我们想如果一个子序列中没有1的话,那么它对答案一定没有贡献,所以要让1对答案贡献最大,让1在中间时被涵盖的次数最多

然后我们从1这个位置开始像,当子序列长度为n-1~1时的情况,n的时候1对其无影响,n-1时,我们把2,3分别放在两端一定满足,而其余长度也都是最多情况,当2,3放在两端时可以最大减少mex(l,r)>=2当但不是素数的情况(这个子序列一定要包含着1,

还是举个例子说好理解吧,a[ ]=(2,4,1,5,3)

长度为 n - 1 = 4 时:可以为2 4 1 5 ,4 1 5 3

长度为 n - 2 = 3 时:可以为2 4 1 ,4 1 5,1 5 3

长度为 n - 3 = 2 时:只有,4 1,1 5

....

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define pi 3.1415926
  4. #define X first
  5. #define Y second
  6. #define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  7. #define endl "\n"
  8. #define int long long
  9. #define ULL unsigned long long
  10. #define pb push_back
  11. typedef pair<int, int> PII;
  12. int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
  13. const int N = 1e6 + 100, M = 1010, inf = 0x3f3f3f3f, mod = 1e9 + 7,P=133331;
  14. int n;
  15. int a[N];
  16. void solve()
  17. {
  18. cin>>n;
  19. if(n==1)
  20. cout<<1<<endl;
  21. else if(n==2)
  22. cout<<1<<' '<<2<<endl;
  23. else
  24. {
  25. for(int i=1;i<=n;i++)
  26. a[i]=0;
  27. a[(n+1)/2]=1;
  28. a[1]=2;
  29. a[n]=3;
  30. int num=4;
  31. for(int i=1;i<=n;i++)
  32. {
  33. if(a[i]!=0)cout<<a[i]<<' ';
  34. else
  35. {
  36. cout<<num++<<' ';
  37. }
  38. }
  39. cout<<endl;
  40. }
  41. }
  42. signed main()
  43. {
  44. Ysanqian;
  45. int T;
  46. //T=1;
  47. cin >> T;
  48. while (T--)solve();
  49. return 0;
  50. }

C - Particles

题意:给定一个序列,可以选一个数去掉,让这个数两边的数融合,问最后的那个数最大是多少

思路:我们可以发现只有两个数间隔为奇数时才可以融合,例如3 1 2 4 5,我们可以让3 2 5融合

也可以只让3 5融合,所以答案就是max(sum : max偶数下标( a[ i ] , 0 ),sum : max奇数下标(a[ i ],0)),当然有一种特殊情况就是全是负数,此时输出最大负数即可

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define pi 3.1415926
  4. #define X first
  5. #define Y second
  6. #define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  7. #define endl "\n"
  8. #define int long long
  9. #define ULL unsigned long long
  10. #define pb push_back
  11. typedef pair<int, int> PII;
  12. const int N = 1e6 + 100, M = 1010, inf = 0x3f3f3f3f, mod = 1e9 + 7,P=133331;
  13. int max(int a,int b)
  14. {
  15. if(a>b)return a;
  16. return b;
  17. }
  18. int min(int a,int b)
  19. {
  20. if(a>b)return b;
  21. return a;
  22. }
  23. int n;
  24. int a[N];
  25. void solve()
  26. {
  27. cin>>n;
  28. int maxx=-1e9;
  29. for(int i=1;i<=n;i++)
  30. {
  31. cin>>a[i];
  32. maxx=max(maxx,a[i]);
  33. }
  34. int ans1=0,ans2=0;
  35. for(int i=1;i<=n;i++)
  36. {
  37. if(i&1)ans1+=max(0,a[i]);
  38. else ans2+=max(0,a[i]);
  39. }
  40. if(maxx<0)
  41. cout<<maxx<<endl;
  42. else
  43. cout<<max(ans1,ans2)<<endl;
  44. }
  45. signed main()
  46. {
  47. Ysanqian;
  48. int T;
  49. //T=1;
  50. cin >> T;
  51. while (T--)solve();
  52. return 0;
  53. }

​​​​​​D - Row Majort

题意:让你找一个总长为n的字符串,要求不管这个序列变成任何r*c的矩阵,都不会有相邻的两个字符相等。

思路:r,c一定时n的因子,我们现想如何让行元素不相等,我们想到构建一个递增(有规律就行)的循环串就可以避免这种情况,在想如和避免列相邻元素不同,其实只要循环节不等n的约数就一定不会相同

例如:n=4,m(循环节)=2;n=4,m=3;

  1. abab ab a abca ab a
  2. ab b ca b
  3. a c
  4. b a
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define pi 3.1415926
  4. #define X first
  5. #define Y second
  6. #define Ysanqian ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  7. #define endl "\n"
  8. #define int long long
  9. #define ULL unsigned long long
  10. #define pb push_back
  11. typedef pair<int, int> PII;
  12. const int N = 1e6 + 100, M = 1010, inf = 0x3f3f3f3f, mod = 1e9 + 7,P=133331;
  13. #define max(a,b) (((a)>(b)) ? (a):(b))
  14. #define min(a,b) (((a)<(b)) ? (a):(b))
  15. int n,t;
  16. char s[1000001];
  17. void solve()
  18. {
  19. char s[1000001];
  20. cin>>n;
  21. int c = 1;
  22. while ((n % c) == 0)
  23. c++;
  24. for (int i = 0; i < n; i++)
  25. s[i] = 'a'+(i % c);
  26. cout<<s<<endl;
  27. }
  28. signed main()
  29. {
  30. Ysanqian;
  31. int T;
  32. //T=1;
  33. cin >> T;
  34. while (T--)solve();
  35. return 0;
  36. }

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

闽ICP备14008679号