A题:马鸿儒
题解:
#include <bits/stdc++.h> using namespace std; int a[10005],b[10005],n,c[10005]; void dfs(int* a,int* b,int cnt) { if(cnt==n+1) { int pos,fff=0; for(int i=300;i>=0;i--) if(a[i]) { pos=i; break; } if(a[pos]==-1) fff=1; cout<<pos<<" "; for(int i=0;i<=pos;i++) if(fff) cout<<-a[i]<<" "; else cout<<a[i]<<" "; cout<<" "; fff=0; for(int i=300;i>=0;i--) if(b[i]) { pos=i; break; } cout<<pos<<" "; if(b[pos]==-1) fff=1; for(int i=0;i<=pos;i++) if(fff) cout<<-b[i]<<" "; else cout<<b[i]<<" "; } else { int ff=0; for(int i=0;i<=1005;i++) c[i]=0; for(int i=0;i<=1005;i++) if(a[i]!=0) c[i+1]=a[i]; for(int i=0;i<=1005;i++) { c[i]+=b[i]; if(abs(c[i])>1) ff=1,c[i]=0; } if(ff) for(int i=0;i<=1005;i++) c[i]=-c[i]; for(int i=0;i<=1005;i++) b[i]=a[i]; for(int i=0;i<=1005;i++) a[i]=c[i]; dfs(a,b,cnt+1); } } int main() { cin>>n; a[0]=1,b[0]=0; dfs(a,b,1); }
//模拟