首页 > 代码库 > CodeForces - 792C
CodeForces - 792C
vj训练时的题,改了两个小时bug。只要把情况都考虑全考虑清楚这个题就比较好写了。
要注意搜索时从后向前搜索比较容易处理10111这种情况。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 char s[100010],s1[100010],s2[100010],s3[100010],s11[100010]; 7 8 int main() 9 { 10 scanf("%s",&s); 11 int len; 12 len=strlen(s); 13 int sum=0,a=0; 14 for(int i=0; i<len; i++) 15 { 16 sum+=s[i]-‘0‘; 17 if(s[i]==‘0‘)//为了输出时分辨11和101的情况 18 a=1; 19 } 20 if(sum%3==0)//直接输出去掉前导零的串 21 { 22 int cnt=0; 23 for(int i=0; i<len-1; i++) 24 { 25 if(s[i]!=‘0‘) 26 break; 27 else 28 cnt++; 29 } 30 int j=0; 31 for(int i=cnt; i<len; i++) 32 s1[j++]=s[i]; 33 cout<<s1<<endl; 34 } 35 else 36 { 37 int num=sum%3;//这样存不用分余2和余1两种情况 38 int cnt1=-1,cnt2=-1,cnt3=-1; 39 int t1=0,t2=0; 40 for(int i=len-1; i>=0; i--)//从后向前找与num相同的位数 41 { 42 if((s[i]-‘0‘)%3==num) 43 { 44 cnt1=i; 45 break; 46 } 47 } 48 if(cnt1!=-1) 49 { 50 int j=0; 51 for(int i=0; i<len; i++) 52 { 53 if(i==cnt1) 54 continue; 55 else 56 s1[j++]=s[i]; 57 } 58 int cnt=0; 59 for(int i=0; i<j-1; i++) 60 { 61 if(s1[i]!=‘0‘) 62 break; 63 else 64 cnt++; 65 } 66 for(int i=cnt; i<j; i++) 67 s2[t1++]=s1[i]; 68 } 69 for(int i=len-1; i>=1; i--) 70 { 71 if((s[i]-‘0‘)%3==0) 72 continue; 73 for(int j=i-1; j>=0; j--) 74 { 75 int cnt=s[i]-‘0‘+s[j]-‘0‘; 76 if(cnt%3==num) 77 { 78 cnt2=i; 79 cnt3=j; 80 break; 81 } 82 } 83 if(cnt2!=-1&&cnt3!=-1) 84 break; 85 } 86 if(cnt2!=-1&&cnt3!=-1) 87 { 88 int j=0; 89 for(int i=0; i<len; i++) 90 { 91 if(i==cnt2||i==cnt3) 92 continue; 93 s11[j++]=s[i]; 94 } 95 int cnt=0; 96 for(int i=0; i<j-1; i++) 97 { 98 if(s11[i]!=‘0‘) 99 break; 100 else 101 cnt++; 102 } 103 for(int i=cnt; i<j; i++) 104 s3[t2++]=s11[i]; 105 } 106 if(!a&&t1==0&&t2==0)//当数据中没有0而且去掉后没有数字时 107 cout<<-1<<endl; 108 else if(t1==0&&t2==0) 109 cout<<0<<endl; 110 else if(t1>=t2) 111 cout<<s2<<endl; 112 else 113 cout<<s3<<endl; 114 } 115 return 0; 116 }
CodeForces - 792C
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。