2 0 2Sample Output
Case #1: 1 Case #2: 1024
题目就是让我们求一共有多少种情况;
解题思路:
本人实在不知道大神们是怎么推出32的n次方的,模拟赛的时候蒙了一波,没想到猜对了,实现方法却超时了,这里用到了大数的幂运算。
这里才知道自己为什么超时,数组存储的位数越多(当然是在合理的情况下),越省时间。
详见代码:
#include
#include
#include
using namespace std;
int b[10000000];
int main()
{
int t;
int a;
int len;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
scanf("%d",&a);
len = 1;
memset(b,0,sizeof(b));
b[1] = 1;
for(int k=1;k<=a;k++)
{
int c = 0;
for(int j=1;j<=len;j++)
{
b[j] *= 32; // 这里每个数组存储的是个两位数,不清楚的话可以手动模拟一下
b[j] += c;
c = b[j]/100;
b[j] %= 100;
}
while(c!=0)
{
b[++len] = c%100;
c /= 100;
}
}
printf("Case #%d: ",i);
for(int w=len w>=1; w--)
{
if(w!=len) printf("%02d",b[w]); // 输出的时候要特别注意,因为b[i]存储的是个两位数,输出的时候
// 不足两位要补零,不然b[i]表示的意义就变了。
else printf("%d", b[w]);
}
printf("\n");
}
return 0;
}
-------------------------------------------------------------------------------------------------------------------------------------------------
附上超时代码:
#include
#include
#include
#include
using namespace std;
int a[10000000];
int b[10000000];
int aa[10000000];
int bb[10000000];
int er[100];
int erjin[100];
int san[100];
int jinsan[100];
int main()
{
int T;
int f;
for(int i=0;i<35;i++)
{
er[i] = i%10;
erjin[i] = i/10;
}
int ai,bi,ci;
scanf("%d",&T);
for(int i=1; i<=T; i++)
{
scanf("%d",&f);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(aa, 0, sizeof(aa));
memset(bb, 0, sizeof(bb));
a[1]=3;
a[2]=2;
int num =0;
int sum =0;
if(f==1){cout << "32\n";continue;}
if(f==0){cout << "1\n";continue;}
ai = 2;
for(int w=2;w<=f;w++)
{
ai++;
num = 0;
for(int t = ai-1;t>=0 ;t--)
{
aa[t] = a[t]*2 + num;
if(aa[t] >=10) {num = erjin[aa[t]]; aa[t] = er[aa[t]];}
else num = 0;
}
/*for(int r=0;r=0; t--)
{
bb[t]= a[t] * 3+ num;
if(bb[t] >= 10){num = erjin[bb[t]]; bb[t] = er[bb[t]];}
else num = 0;
}
/*for(int r=0;r=1; j--)
{
b[j] = aa[j-1]+bb[j] + num;
if(b[j]>=10){num = erjin[b[j]];b[j] = er[b[j]];}
else num = 0;
}
b[0] = num;
memcpy(a+1,b,sizeof(b));
a[0] = 0;
ai++;
//a[ai+1] = 0;
}
int flag=1;
for(int t=1;t<=ai;t++)
{
if(a[t]==0&&flag==1)continue;
flag = 0;
printf("%d",a[t]);
}
printf("\n");
}
return 0;
}
有木有大佬可以解释一下为什么是2^n^5?