比赛记录:
1006因为智商不够卡了一年
1010lfw开场就看了这题,发现是水题,然后一直没写,最后30分钟开始写,一开始还没想清楚WA了一发,想清楚的时候已经4点52了,就不知道怎么改了
赛后发现1010 是全场最水的题,血亏,以后要是要多看看后面的题可不可做,可能是榜被带歪了。
题解:
1001 A + B = C
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int size=1e5+5; 4 char a[size],b[size],c[size]; 5 int d[size]; 6 int main() 7 { 8 int t; 9 scanf("%d",&t); 10 while(t--) 11 { 12 scanf("%s%s%s",a+1,b+1,c+1); 13 int lena=strlen(a+1),lenb=strlen(b+1),lenc=strlen(c+1); 14 int za=0,zb=0,zc=0; 15 while(a[lena]=='0') lena--,za++; 16 while(b[lenb]=='0') lenb--,zb++; 17 while(c[lenc]=='0') lenc--,zc++; 18 int lenaa=lena,lenbb=lenb,lencc=lenc; 19 bool flag=0; 20 int tmp; 21 a[0]='0',b[0]='0'; 22 if(a[lena]==c[lenc]) 23 { 24 flag=0; 25 while(a[lena]==c[lenc]&&lena>=0&&lenc>=1) {if(lena!=0) lena--;lenc--;}tmp=lenc; 26 while(((a[lena]-'0'+b[lenb]-'0'+flag)%10==c[lenc]-'0')&&lena>=0&&lenb>=0&&lenc>=1) 27 { 28 flag=(a[lena]-'0'+b[lenb]-'0'+flag)/10; 29 lenc--; 30 if(lena!=0) lena--; 31 if(lenb!=0) lenb--; 32 } 33 int lenmx=max({za,zb,zc}); 34 if(lena==lenb&&lenb==lenc&&lenc==0) 35 { 36 printf("%d %d %d\n",lenmx-za,lenmx-zb+lencc-tmp,lenmx-zc); 37 continue; 38 } 39 } 40 lena=lenaa,lenb=lenbb,lenc=lencc; 41 if(b[lenb]==c[lenc]) 42 { 43 flag=0; 44 while(b[lenb]==c[lenc]&&lenb>=0&&lenc>=1) {if(lenb!=0) lenb--;lenc--;}tmp=lenc; 45 while(((a[lena]-'0'+b[lenb]-'0'+flag)%10==c[lenc]-'0')&&lena>=0&&lenb>=0&&lenc>=1) 46 { 47 flag=(a[lena]-'0'+b[lenb]-'0'+flag)/10; 48 lenc--; 49 if(lena!=0) lena--; 50 if(lenb!=0) lenb--; 51 } 52 int lenmx=max({za,zb,zc}); 53 if(lena==lenb&&lenb==lenc&&lenc==0) 54 { 55 printf("%d %d %d\n",lenmx-za+lencc-tmp,lenmx-zb,lenmx-zc); 56 continue; 57 } 58 } 59 lena=lenaa,lenb=lenbb,lenc=lencc; 60 int lend=max(lenb,lena); 61 flag=0; 62 for(int i=lend;i>=0;i--) 63 { 64 int an,bn; 65 an=lena==0?0:(a[lena--]-'0'); 66 bn=lenb==0?0:(b[lenb--]-'0'); 67 d[i]=(an+bn+flag)%10; 68 flag=(an+bn+flag)/10; 69 } 70 int zd=0; 71 while(d[lend]==0) lend--,zd++;//,cout<<d[lend]<<' '<<lend<<endl;; 72 while(lend>=0&&(d[lend]==(c[lenc]-'0'))&&lenc>=1) 73 { 74 lend--; 75 lenc--; 76 } 77 int lenab=max(za,zb); 78 int lenmx=max(max({za,zb})+zd,zc); 79 if(((lenc==0)&&(lend==0)&&(d[0]==0))||((lenc==0)&&(lend==-1))) 80 { 81 printf("%d %d %d\n",lenmx-(lenab+zd)+lenab-za,lenmx-(lenab+zd)+lenab-zb,lenmx-zc); 82 continue; 83 } 84 puts("-1"); 85 } 86 }