当前位置:   article > 正文

C++2021年8月月赛题解(Div.2-初中组)题解_初二c++竞赛题目

初二c++竞赛题目

C++2021年8月Div.2初中组竞赛题解集,全是干货!!!

放置拼块

代码:

  1. # include<cstdio>
  2. # include<iostream>
  3. typedef unsigned long long ull;
  4. using namespace std;
  5. int n, m, k, x, y, ans; ull tmp;
  6. inline int num(int p, int q) {return p * m + q - m - 1;}
  7. inline ull square(int x, int y) {
  8. return (1ull << num(x, y)) | (1ull << num(x + 1, y)) | (1ull << num(x, y + 1)) | (1ull << num(x + 1, y + 1));
  9. }
  10. inline void dfs(int dx, int dy) {
  11. if(dx == n) return ;
  12. for(register int j = dy; j < m; j++)
  13. if(!(tmp & square(dx, j))) {
  14. tmp |= square(dx, j);
  15. ans++;
  16. j >= m - 2 ? dfs(dx + 1, 1) : dfs(dx, j + 2);
  17. tmp ^= square(dx, j);
  18. }
  19. for(register int i = dx + 1; i < n; i++)
  20. for(register int j = 1; j < m; j++)
  21. if(!(tmp & square(i, j))) {
  22. tmp |= square(i, j);
  23. ans++;
  24. j >= m - 2 ? dfs(i + 1, 1) : dfs(i, j + 2);
  25. tmp ^= square(i, j);
  26. }
  27. }
  28. int main() {
  29. scanf("%d%d%d", &n, &m, &k);
  30. for(register int i = 1; i <= k; i++)
  31. scanf("%d%d", &x, &y), tmp |= square(x, y);
  32. dfs(1, 1);
  33. printf("%d", ans + 1);
  34. return 0;
  35. }

感应门

代码:

  1. # include<cstdio>
  2. # include<iostream>
  3. using namespace std;
  4. int n, x, t, ans, last;
  5. int main() {
  6. scanf("%d%d%d", &n, &x, &last);
  7. for(int i = 2; i <= n; i++) {
  8. scanf("%d", &t);
  9. ans += min(t - last, x);
  10. last = t;
  11. }
  12. printf("%d", ans + x);
  13. return 0;
  14. }

伙伴

代码:

  1. # include<cstdio>
  2. # include<iostream>
  3. using namespace std;
  4. const int N = 1e6 + 5;
  5. int n, m, x, l[N], r[N];
  6. int main() {
  7. scanf("%d%d", &n, &m);
  8. int i;
  9. for(i = 1; i <= n; i++) {
  10. l[i] = i == 1 ? -1 : i - 1;
  11. r[i] = i == n ? -1 : i + 1;
  12. }
  13. for(i = 1; i <= m; i++) {
  14. scanf("%d", &x);
  15. if(l[x] == -1) printf("* ");
  16. else printf("%d ", l[x]), r[l[x]] = r[x];
  17. if(r[x] == -1) printf("* ");
  18. else printf("%d ", r[x]), l[r[x]] = l[x];
  19. puts("");
  20. }
  21. return 0;
  22. }

跑步

代码:

  1. # include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. const int N = 1e5 + 5;
  5. int n, x, f[N][3];
  6. int main() {
  7. scanf("%d", &n);
  8. for(int i = 1; i <= n; i++) {
  9. scanf("%d", &x);
  10. f[i][0] = max(f[i - 1][2], f[i - 1][0]) + x;
  11. f[i][1] = max(f[i - 1][2], f[i - 1][0]) + 2 * x;
  12. f[i][2] = f[i - 1][1];
  13. }
  14. printf("%d", max(max(f[n][0], f[n][1]), f[n][2]));
  15. return 0;
  16. }

希望对您有所帮助!!!

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

闽ICP备14008679号