当前位置:   article > 正文

ZZULIOJ-Contest1284 - 18级新生周赛(5)题解_c语言小g的日常之签到

c语言小g的日常之签到

A: 小G的日常之ABABAB

思路:统计一下奇数位和偶数位,每个数字的个数,用总个数减去奇数位和偶数位出现最多的个数就是答案。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int a[1005], b[100005], c[100005];
  4. int main()
  5. {
  6. int n;
  7. scanf("%d",&n);
  8. memset(b,0,sizeof(b));
  9. memset(c,0,sizeof(c));
  10. for(int i = 1; i <= n; i++)
  11. {
  12. scanf("%d",&a[i]);
  13. if(i % 2 != 0) b[a[i]]++;
  14. else c[a[i]]++;
  15. }
  16. int m1 = 0, m2 = 0;
  17. for(int i = 0; i <= 100000; i++)
  18. {
  19. m1 = max(m1, b[i]);
  20. m2 = max(m2, c[i]);
  21. }
  22. int ans = n - m1 - m2;
  23. printf("%d\n",ans);
  24. return 0;
  25. }

B: 小G的日常之开关灯

思路:从左第一个关灯的位置开始按要求模拟即可。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int a[1005];
  4. int main()
  5. {
  6. int n; scanf("%d",&n);
  7. for(int i = 0; i < n; i++)
  8. scanf("%d",&a[i]);
  9. int flag = 0, cnt = 0;
  10. while(1)
  11. {
  12. flag = 0;
  13. for(int i = 0; i < n; i++)
  14. {
  15. if(a[i] == 0)
  16. {
  17. for(int j = i; j < n; j++)
  18. {
  19. if(a[j] == 0) a[j] = 1;
  20. else a[j] = 0;
  21. }
  22. cnt++;
  23. }
  24. }
  25. for(int i = 1; i < n; i++)
  26. {
  27. if(a[i] == a[i-1] && a[i] == 1)
  28. continue;
  29. else flag = 1;
  30. }
  31. if(!flag) break;
  32. }
  33. printf("%d\n",cnt);
  34. return 0;
  35. }

C: 小G的日常之折扣票价 

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int a[1005];
  4. int main()
  5. {
  6. double a, b, c;
  7. scanf("%lf%lf",&a,&b);
  8. c = b / 2.0;
  9. printf("%.2f",a+c);
  10. return 0;
  11. }

D: 小G的日常之签到

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int a[1005];
  4. int main()
  5. {
  6. int a, b;
  7. scanf("%d%d",&a,&b);
  8. for(int c = a; c <= b; c++)
  9. {
  10. if(a * b * c % 2 != 0)
  11. {puts("Yes"); return 0;}
  12. }
  13. puts("No");
  14. return 0;
  15. }

 E: 小G的日常之算术题

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. int a,b;
  6. char s[5][70]={"#####......#..#####..#####..#...#..#####..#####..#####..#####..#####","#...#......#......#......#..#...#..#......#..........#..#...#..#...#","#...#......#..#####..#####..#####..#####..#####......#..#####..#####","#...#......#..#..........#......#......#..#...#......#..#...#......#","#####......#..#####..#####......#..#####..#####......#..#####..#####"};
  7. scanf("%d %d",&a,&b);
  8. int ans = a + b;
  9. int x[20], l = 0;
  10. if(ans == 0)
  11. {
  12. x[0] = 0;
  13. l++;
  14. }
  15. while(ans != 0)
  16. {
  17. x[l++] = ans % 10;
  18. ans = ans / 10;
  19. }
  20. for(int j = 0; j < 5; j++)
  21. {
  22. for(int i = l - 1; i >= 0; i--)
  23. {
  24. if(x[i] == 0)
  25. for(int k = 0; k < 5; k++)
  26. printf("%c",s[j][k]);
  27. if(x[i] == 1)
  28. for(int k = 7; k < 12; k++)
  29. printf("%c",s[j][k]);
  30. if(x[i] == 2)
  31. for(int k = 14; k < 19; k++)
  32. printf("%c",s[j][k]);
  33. if(x[i] == 3)
  34. for(int k = 21; k < 26; k++)
  35. printf("%c",s[j][k]);
  36. if(x[i] == 4)
  37. for(int k = 28; k < 33; k++)
  38. printf("%c",s[j][k]);
  39. if(x[i] == 5)
  40. for(int k = 35; k < 40; k++)
  41. printf("%c",s[j][k]);
  42. if(x[i] == 6)
  43. for(int k = 42; k < 47; k++)
  44. printf("%c",s[j][k]);
  45. if(x[i] == 7)
  46. for(int k = 49; k < 54; k++)
  47. printf("%c",s[j][k]);
  48. if(x[i] == 8)
  49. for(int k = 56; k < 61; k++)
  50. printf("%c",s[j][k]);
  51. if(x[i] == 9)
  52. for(int k = 63; k < 68; k++)
  53. printf("%c",s[j][k]);
  54. if(i != 0)
  55. printf("..");
  56. }
  57. printf("\n");
  58. }
  59. }

  F: 小G的日常之股票

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. int t, n;
  6. scanf("%d",&t);
  7. while(t--)
  8. {
  9. scanf("%d",&n);
  10. int mx = 0, x;
  11. for(int i = 0; i < n; i++)
  12. {
  13. scanf("%d",&x);
  14. mx = max(mx, x);
  15. }
  16. printf("%d\n",mx);
  17. }
  18. return 0;
  19. }

  G: 小G的日常之游戏(二)

思路:用map映射一下,然后按要求模拟。 

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. map<string,int> mp;
  4. int main()
  5. {
  6. int n, flag = 0;
  7. scanf("%d",&n); string s, st, se;
  8. cin >> s; mp[s]++; se = s[s.length()-1];
  9. for(int i = 0; i < n - 1; i++)
  10. {
  11. cin >> s;
  12. st = s[0];
  13. if(st != se) flag = 1;
  14. mp[s]++;
  15. if(mp[s] > 1) flag = 1;
  16. se = s[s.length()-1];
  17. }
  18. if(!flag) puts("Yes");
  19. else puts("No");
  20. return 0;
  21. }

H: 小G的日常之烦心事

思路:式子化简一下就很容易了。

当a[j]-a[i]>0时,abs(a[j]-a[i])+j-i=  a[j] - a[i] + j - i = (a[j] + j) - (a[i] + i)。

当a[j]-a[i]<0时,abs(a[j]-a[i])+j-i=  a[i] - a[j] + j - i = (a[i] - i)-(a[j] - j)。

 

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N = 1e6+10;
  4. int a[N];
  5. int main()
  6. {
  7. int n, mx = 0, mi = N, sum;
  8. scanf("%d",&n);
  9. for(int i = 1; i <= n; i++) scanf("%d",&a[i]);
  10. for(int i = 1; i <= n; i++)
  11. {
  12. a[i] -= i;
  13. mx = max(a[i],mx);
  14. mi = min(a[i],mi);
  15. }
  16. sum = mx - mi; mx = 0, mi = N;
  17. for(int i = 1; i <= n; i++)
  18. {
  19. a[i] += 2*i;
  20. mx = max(a[i],mx);
  21. mi = min(a[i],mi);
  22. }
  23. sum = max(sum, mx - mi);
  24. printf("%d\n",sum);
  25. return 0;
  26. }

I: 小G的日常之游戏

思路:不知道为啥用string会超时,那就用char 直接模拟吧。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N = 1e6+5;
  4. char a[N];
  5. int main()
  6. {
  7. cin >> a;
  8. int len = strlen(a);
  9. while(1)
  10. {
  11. int flag = 0, k = 0;
  12. for(int i = 0; i < len - 1; i++)
  13. {
  14. if(a[i] != '*')
  15. {
  16. for(int j = i+1 ; j < len ; j++)
  17. {
  18. if(a[j] != '*')
  19. {
  20. k = j;
  21. break;
  22. }
  23. }
  24. if(a[i] == a[k])
  25. {
  26. a[i] = a[k] = '*';
  27. flag = 1;
  28. }
  29. }
  30. }
  31. if(!flag) break;
  32. }
  33. for(int i = 0; i < len; i++)
  34. if(a[i] != '*') cout << a[i];
  35. }

 J: 小G的日常之接雨水

思路:方法一从左扫一遍然后从右扫一遍,方法二双指针左右同时扫,现在只讲方法二,首先接雨水的多少肯定取决于最短柱子(木桶原理),我们维护左右两个最高的柱子,然后分别用两条指针,分别从两端向最高的柱子靠近,如果柱子大于前面柱子的最大值则不存在积水,小于则存在积水,积水量等于前面柱子的最大值减去此柱子高度。 

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. const int maxn = 1e6+10;
  5. int main()
  6. {
  7. int n, a[maxn]; scanf("%d",&n);
  8. for(int i = 0; i < n; i++) scanf("%d",&a[i]);
  9. int l = 0, r = n - 1, rmax = 0, lmax = 0;
  10. ll ans = 0;
  11. while(l < r)
  12. {
  13. lmax = max(lmax, a[l]);
  14. rmax = max(rmax, a[r]);
  15. if(lmax < rmax)
  16. ans += lmax - a[l], l++;
  17. else
  18. ans += rmax - a[r], r--;
  19. }
  20. printf("%lld\n", ans);
  21. return 0;
  22. }

 

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

闽ICP备14008679号