当前位置:   article > 正文

Codeforces Round 962 (Div. 3) a~d题解_codeforces round 962 (div. 3)题解

codeforces round 962 (div. 3)题解

Dashboard - Codeforces Round 962 (Div. 3) - Codeforces

A:

        题意:

        给出腿的数量,要求最少的动物数量

        思路:

        鸡2条腿,牛4条腿,那么我们尽可能的让牛的数量多,这样动物数量才会少

        代码:
  1. #include<bits/stdc++.h>
  2. #define int long long
  3. #define endl '\n'
  4. using namespace std;
  5. void sl()
  6. {
  7. int n;
  8. cin >> n;
  9. int sum = n/4; // 看最多有几头牛
  10. n %= 4;
  11. cout << sum + n/2 << endl;
  12. }
  13. signed main()
  14. {
  15. ios::sync_with_stdio(0);
  16. cin.tie(0);
  17. cout.tie(0);
  18. int T;
  19. cin >> T;
  20. while(T--) sl();
  21. return 0;
  22. }

B:

        题意:

        给出n,k,将n*n的矩阵缩小k倍

        代码:
  1. #include<bits/stdc++.h>
  2. #define int long long
  3. #define endl '\n'
  4. using namespace std;
  5. int a[1005][1005];
  6. void sl()
  7. {
  8. int n,m;
  9. char ch;
  10. cin >> n >> m;
  11. for (int i = 1; i <= n; ++i)
  12. {
  13. for (int j = 1; j <= n; ++j)
  14. {
  15. cin >> ch;
  16. a[i][j] = ch-'0';
  17. }
  18. }
  19. for (int i = 1; i <= n/m; ++i)
  20. {
  21. for (int j = 1; j <= n/m; ++j)
  22. {
  23. cout << a[(i-1)*m+1][(j-1)*m+1]; // 循环时写i+=k,j+=k也可以
  24. }
  25. cout << endl;
  26. }
  27. }
  28. signed main()
  29. {
  30. ios::sync_with_stdio(0);
  31. cin.tie(0);
  32. cout.tie(0);
  33. int T;
  34. cin >> T;
  35. while(T--) sl();
  36. return 0;
  37. }

C:

        题意:

        给出两个长度相同字符串,有q次询问,求区间[l,r]内需要修改多少个字母才能使得a,b的[l,r]区间相等,并且一个查询的操作不会影响到其他查询的操作

        思路:

        区间查询,并且不会影响后续的操作,可以看出,这是一道静态区间查询的题目,我们只需统计[l,r]内的字母的个数,找出有多少个不相等的即可,由此可以联想到前缀和,用26个字母的前缀和(类似桶的思想),跑一遍的话复杂度也就O(26n)

        代码:
  1. #include<bits/stdc++.h>
  2. #define int long long
  3. #define endl '\n'
  4. using namespace std;
  5. int ga[30][200010],gb[30][200010];
  6. void sl()
  7. {
  8. map<char,int> mpa,mpb;
  9. int n,q;
  10. string a,b;
  11. cin >> n >> q;
  12. cin >> a >> b;
  13. for (int i = 1; i <= n; ++i)
  14. {
  15. for (char ch = 'a'; ch <= 'z'; ++ch)
  16. {
  17. ga[ch-'a'+1][i] = ga[ch-'a'+1][i-1];
  18. gb[ch-'a'+1][i] = gb[ch-'a'+1][i-1];
  19. }
  20. ga[a[i-1]-'a'+1][i]++; //前缀和
  21. gb[b[i-1]-'a'+1][i]++;
  22. }
  23. for (int i = 1; i <= q; ++i)
  24. {
  25. int l,r;
  26. cin >> l >> r;
  27. int sum = 0;
  28. for (char ch = 'a'; ch <= 'z'; ++ch)
  29. {
  30. sum += abs(ga[ch-'a'+1][r] - ga[ch-'a'+1][l-1] - gb[ch-'a'+1][r] + gb[ch-'a'+1][l-1]);
  31. }
  32. cout << (sum + 1)/2 << endl;
  33. // 两个字母不相同的话可以将这个字母改成另外那个字母,这样的次数是一次,尽可能少
  34. }
  35. }
  36. signed main()
  37. {
  38. ios::sync_with_stdio(0);
  39. cin.tie(0);
  40. cout.tie(0);
  41. int T;
  42. cin >> T;
  43. while(T--) sl();
  44. return 0;
  45. }

D:

        题意:

        给定两个整数 n 和 x ,条件是ab+ac+bc≤n 和 a+b+c≤x ,求正整数三胞胎 ( a,b,c ) 的个数。

        思路:

        分类讨论:(1)a=b=c的情况,可以暴力枚举一遍

        (2)a = b , a != c的情况,暴力枚举一遍,将结果乘3,由条件得a*a <= n,并且a*a + 2ac <= n,同时需要排除a=b=c的情况,加多了3次就要减去3次

        (3)a != b, b != c, a != c的情况,这样a,b暴力枚举,并且要求a<b<c,然后将结果乘6即可

a,b,c都暴力枚举的话会超时,最坏是1e18了,a,b暴力的话也会1e12,所以我们还需要剪枝一下,不满足的直接break

        代码:
  1. #include<bits/stdc++.h>
  2. #define endl '\n'
  3. using namespace std;
  4. void sl()
  5. {
  6. int n,x,c;
  7. cin >> n >> x;
  8. long long ans = min(int(sqrt(n/3)),int(x/3)); // 第一种情况
  9. for (int a = 1; a*a <= n; ++a) // 第二种情况
  10. {
  11. c = min((n - a*a) / (2*a) , x-2*a);
  12. if (a*a + 2*a*c > n) break;
  13. if (c > 0) ans += 3*c;
  14. if (c >= a) ans -= 3;
  15. }
  16. for (int a = 1; a <= x; ++a) // 第三种情况
  17. {
  18. for (int b = a+1; b <= x-a; ++b)
  19. {
  20. c = min((n - a*b) / (a+b) , x-a-b);
  21. if (c > b) ans += 6*(c-b);
  22. else break; // 小剪枝,不会超时
  23. }
  24. }
  25. cout << ans << endl;
  26. }
  27. signed main()
  28. {
  29. ios::sync_with_stdio(0);
  30. cin.tie(0);
  31. cout.tie(0);
  32. int T;
  33. cin >> T;
  34. while(T--) sl();
  35. return 0;
  36. }

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

闽ICP备14008679号