(不会敲键盘惹qwq)
算法标签:
(又是一个提高+省选-的题)
如果我说我没听懂你信吗
代码qwq:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int a[4][512][201],tot[201],mmax; int pow(int a,int b) { int ans=1,with=a; while(b) { if(b&1) ans*=with; with*=with; b>>=1; } return ans; } void jiafa(int j[],int a[]) { int lb=1; while(lb<=j[0]||lb<=a[0]) { j[lb]+=a[lb]; if(j[lb]>=10) { j[lb]%=10; j[lb+1]++; } lb++; } while(j[lb]>=10) { j[lb]%=10; lb++; j[lb]++; } while(!j[lb]&&lb>0) lb--; if(lb>j[0]) j[0]=lb; } void jiafa1(int a[],int b) { int lb=0; while(b) { a[++lb]=b%10; b/=10; } a[0]=lb; jiafa(tot,a); } int main() { int k,w; cin>>k>>w; int g=w/k; bool youyu=0; int mmax2; if(w%k) { g++; youyu=1; mmax2=pow(2,w%k)-1; } mmax=pow(2,k)-1; for(int i=1;i<mmax;i++) jiafa1(a[0][i],mmax-i); int l=0,n=1; for(int i=3;i<=g;i++) { if(i==g&&youyu&&mmax2<mmax) { for(int i=mmax-1;i>mmax2;i--) jiafa(a[n][mmax2],a[l][i]); jiafa(tot,a[n][mmax2]); for(int j=mmax2-1;j>=1;j--) { memcpy(a[n][j],a[n][j+1],sizeof(a[n][j+1])); jiafa(a[n][j],a[l][j+1]); jiafa(tot,a[n][j]); } break; } jiafa(a[n][mmax-1],a[l][mmax]); jiafa(tot,a[n][mmax-1]); for(int j=mmax-2;j>=1;j--) { memcpy(a[n][j],a[n][j+1],sizeof(a[n][j+1])); jiafa(a[n][j],a[l][j+1]); jiafa(tot,a[n][j]); } for(int j=1;j<=mmax;j++) memset(a[l][j],0,sizeof(a[l][j])); n++;l++; if(n==3) n=0; if(l==3) l=0; } int lt=tot[0]; while(!tot[lt]&<>1) lt--; for(;lt>0;lt--) cout<<tot[lt]; return 0; }//装作是自己写的样子
end-