51 nod 1491 黄金系统
这个题可以找出来规律是q^2=q+1;
然后可以把小的往大的合并,不能把f[i]的给f[i-1],f[i-2],应该是存不下,我一开始这样写第19个样例wa了我下载下来对比发现和答案一样,但是不知道为什么显示的wa。
这个可以统计每一位的值。如果一个位的不够可以从下两位提上来,如果哪一个abs>=2就说明不管后面怎么补也不可能把他变为0.这样就行了。
#include<bits/stdc++.h> using namespace std; const int N = 3e5+10; typedef long long ll; char A[N]; char B[N]; ll cnt[N]; int main() { scanf("%s%s",A,B); int lena=strlen(A); int lenb=strlen(B); for(int i=0;i<lena;i++) cnt[lena-i-1]+=A[i]-'0'; for(int i=0;i<lenb;i++) cnt[lenb-i-1]-=B[i]-'0'; int len=max(lenb-1,lena-1); for(int i=len;i>=2;i--) { if(abs(cnt[i])>=2) { if(cnt[i]<0) { printf("<"); return 0; } else if(cnt[i]>0) { printf(">"); return 0; } } cnt[i-1]+=cnt[i]; cnt[i-2]+=cnt[i]; } for(int i=1;i>=0;i--) { if(cnt[i]<0) { printf("<"); return 0; } else if(cnt[i]>0) { printf(">"); return 0; } else if(i==0&&cnt[i]==0) { printf("="); } } }