当前位置:   article > 正文

Codeforces Round 870 (Div. 2)AB

codeforces round 870 (div. 2)

今天下午vp了两场div2,然后结果非常的惨淡,一共开了4道题,然后一道题目都没有做来了,这件很伤心的事情,但是正如高中的语文老师所说的,我应该值得庆幸,这是平常训练而不是考试,如果是考试的话自己就没了...

AProblem - A - Codeforces (Unofficial mirror by Menci)

一看题意感觉好难,没啥思路,而且脑子里面很混乱;

想了一会有了点思路,然后就开始写,我先用桶计数,设ans的初始值为150,人数最多为100人,

然后我开始枚举说谎的人数,当时我认为n-a[i]为说谎的人数,如果a[i]!=0&&n-a[i]>=i就为真的,然后ans取n-a[i]的最小值,如果ans最后为150,说明有矛盾。

然后就一直不对。赛后想了想,题目中说的是说谎的人至少为x,而不是正好是x,所以说谎的人数不一定为n-a[i]。

然后我把a[i]改为s[i]还是不对,仔细想下还是刚才那个原因:

下面是我的代码:

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<string.h>
  6. #include<queue>
  7. #include<stack>
  8. #include<deque>
  9. #include<vector>
  10. #include<map>
  11. #include<set>
  12. #include <utility>
  13. using namespace std;
  14. typedef long long ll ;
  15. #define pii pair<int,int>
  16. const int inf = 0x3f3f3f3f;//106110956
  17. inline int read(){
  18. int x = 0, f = 1;
  19. char ch = getchar();
  20. while(ch < '0' || ch > '9'){
  21. if (ch == '-')
  22. f = -1;
  23. ch = getchar();
  24. }
  25. while(ch >= '0' && ch <= '9'){
  26. x = (x<<1) + (x<<3) + (ch^48);
  27. ch = getchar();
  28. }
  29. return x * f;
  30. }
  31. void print(__int128 num) {
  32. if(num) {
  33. print(num/10);
  34. putchar(num%10+'0');
  35. }
  36. }
  37. int s[105];
  38. int a[105];
  39. int main(){
  40. int t;
  41. scanf("%d",&t);
  42. while(t--){
  43. int n;
  44. scanf("%d",&n);
  45. //memset(s,0,sizeof(s));
  46. memset(a,0,sizeof(a));
  47. for(int i=1;i<=n;i++){
  48. int x;
  49. scanf("%d",&x);
  50. a[x]++;
  51. }
  52. if(a[0]==n){
  53. printf("0\n");
  54. continue;
  55. }
  56. int ans=150;
  57. for(int i=0;i<=n;i++){
  58. if(a[i]!=0&&n-a[i]>=i){
  59. ans=min(ans,n-a[i]);
  60. }
  61. }
  62. if(ans==150){
  63. printf("-1\n");
  64. }else{
  65. printf("%d\n",ans);
  66. }
  67. }
  68. return 0;
  69. }
  70.  

正确思路:枚举说谎的人数i,然后枚举每个人给的说谎的人数a[j],如果i<a[j],就说明这个人说谎了,因为a[j]的意思是至少有a[j]人说谎;因为题目说如果有多种答案输出其中一种即可;

所以只要cnt==i,就break即可

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<string.h>
  6. #include<queue>
  7. #include<stack>
  8. #include<deque>
  9. #include<vector>
  10. #include<map>
  11. #include<set>
  12. #include <utility>
  13. using namespace std;
  14. typedef long long ll ;
  15. #define pii pair<int,int>
  16. const int inf = 0x3f3f3f3f;//106110956
  17. inline int read(){
  18. int x = 0, f = 1;
  19. char ch = getchar();
  20. while(ch < '0' || ch > '9'){
  21. if (ch == '-')
  22. f = -1;
  23. ch = getchar();
  24. }
  25. while(ch >= '0' && ch <= '9'){
  26. x = (x<<1) + (x<<3) + (ch^48);
  27. ch = getchar();
  28. }
  29. return x * f;
  30. }
  31. void print(__int128 num) {
  32. if(num) {
  33. print(num/10);
  34. putchar(num%10+'0');
  35. }
  36. }
  37. int a[105];
  38. int main(){
  39. int t;
  40. scanf("%d",&t);
  41. while(t--){
  42. int n;
  43. scanf("%d",&n);
  44. for(int i=1;i<=n;i++){
  45. scanf("%d",&a[i]);
  46. }
  47. int flag=0;
  48. for(int i=0;i<=n;i++){
  49. int cnt=0;
  50. for(int j=1;j<=n;j++){
  51. if(a[j]>i)cnt++;
  52. }
  53. if(cnt==i){
  54. printf("%d\n",i);
  55. flag=1;
  56. break;
  57. }
  58. }
  59. if(flag==0)printf("-1\n");
  60. }
  61. return 0;
  62. }

B:Problem - B - Codeforces (Unofficial mirror by Menci)

其实当时有一点思路了,然后自己就没思考清楚,就开始做题,导致错误;

这个毛病需要改一改了,带先理顺大概思路,才能写题!不然很吃亏!!!

 推理过程如下,如果一个数组a,a1==an,a2==an-1.....都相等的话,那么x为无限大,输出0,不然就x就是abs(a1-an),abs(a2-an-1)......的最大公约数了注意此时(a1!=an,a2!=an-1),即gcd,

如果n为奇数,那么最中间的数是不需要考虑的!!

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<string.h>
  6. #include<queue>
  7. #include<stack>
  8. #include<deque>
  9. #include<vector>
  10. #include<map>
  11. #include<set>
  12. #include <utility>
  13. using namespace std;
  14. typedef long long ll ;
  15. #define pii pair<int,int>
  16. const int inf = 0x3f3f3f3f;//106110956
  17. inline int read(){
  18. int x = 0, f = 1;
  19. char ch = getchar();
  20. while(ch < '0' || ch > '9'){
  21. if (ch == '-')
  22. f = -1;
  23. ch = getchar();
  24. }
  25. while(ch >= '0' && ch <= '9'){
  26. x = (x<<1) + (x<<3) + (ch^48);
  27. ch = getchar();
  28. }
  29. return x * f;
  30. }
  31. void print(__int128 num) {
  32. if(num) {
  33. print(num/10);
  34. putchar(num%10+'0');
  35. }
  36. }
  37. ll a[100005];
  38. int main(){
  39. int t;
  40. scanf("%d",&t);
  41. while(t--){
  42. int n;
  43. scanf("%d",&n);
  44. for(int i=1;i<=n;i++){
  45. scanf("%d",&a[i]);
  46. }
  47. int flag=0;
  48. ll x;
  49. for(int i=1,j=n;i<=j;i++,j--){
  50. if(a[i]==a[j]){
  51. continue;
  52. }else{
  53. if(flag==0){
  54. x=abs(a[i]-a[j]);
  55. flag=1;
  56. }else{
  57. x=__gcd(x,abs(a[i]-a[j]));
  58. }
  59. }
  60. }
  61. if(flag==0){
  62. printf("0\n");
  63. }else{
  64. printf("%lld\n",x);
  65. }
  66. }
  67. return 0;
  68. }

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

闽ICP备14008679号