除了第一个全WA, 但是我把第二个输入输出下下来发现是对的? 代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[30303][203],b[203],sum[203];
int k,w;
void jia(int q[],int p[]){
int lenc=0,x=0;
while (lenc<q[0]||lenc<p[0]){
q[++lenc]=q[lenc]+p[lenc]+x;
x=q[lenc]/10;
q[lenc]%=10;
}
if (x>0) q[++lenc]=x;
q[0]=lenc;
return;
}
int main(){
// freopen("P1066_2.in","r",stdin);
scanf("%d%d",&k,&w);
int h=w/k;
int mi=(1<<k)-1;
k=w-h*k;
int hmax=0;
for (int i=0;i<k;i++) hmax+=1<<i;
if (h==1||(h==2&&k==0)){
if (k==0) hmax=mi;
int ans=0;
for (int i=1;i<=hmax;i++) ans+=mi-i;
cout<<ans<<endl;
return 0;
}
for (int i=1;i<mi;i++){
a[i][1]=i;
a[i][0]=1;
jia(sum,a[i]);
}
for (int i=3;i<=h;i++){
for (int j=1;j<=mi-i+1;j++){
jia(a[j],a[j-1]);
jia(sum,a[j]);
}
}
for (int i=1;i<=mi-h;i++) jia(a[i],a[i-1]);
for (int i=mi-h;i>=max(mi-h-hmax+1,1);i--) jia(sum,a[i]);
for (int i=sum[0];i>0;i--) cout<<sum[i];
return 0;
}
有大佬能解释/调整下吗