| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
为什么老是WA,有人能给我个错误的数据吗?
#include<stdio.h>
#include<string.h>
#define MAXL 25
void outl(long t[])//输出
{
char _out[100];
int i,j,tmp,len=0;
for(i=0;i<MAXL;i++)
{
tmp=t[i];
for(j=0;j<4;j++)
{
_out[len++] = tmp%10+'0';
tmp = tmp/10;
}
}
len--;
while(_out[len] == '0')len--;
for(i=len;i>=0;i--)
{
putchar(_out[i]);
}
if(len<0)
putchar('0');
putchar('\n');
}
void mult(long m0[],long m1[],long m2)//乘法
{
int i;
long ans[2*MAXL];
memset(ans,0,sizeof(ans));
for(i=0;i<MAXL;i++)
{
ans[i]+=m1[i]*m2;
if(ans[i]>=10000)
{
ans[i+1] += ans[i]/10000;
ans[i] = ans[i]%10000;
}
}
for(i=0;i<MAXL;i++)
m0[i]=ans[i];
}
void addl(long a1[],long a2[])//加法
{
int i;
for(i=0;i<MAXL;i++)
{
a1[i] += a2[i];
if(a1[i]>=10000)
{
a1[i+1] += a1[i]/10000;
a1[i] = a1[i]%10000;
}
}
}
int main()
{
long ans[MAXL],a[MAXL],b[26][MAXL],
cont[30];//
int n,i,j;
while(scanf("%d",&n)==1&&n!=0)
{
char ch[30];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
getchar();
gets(ch);
b[0][0] = 1;
for(i=1;i<n;i++)
{
b[i][0]=1;
mult(b[i],b[i-1],26-n+i);
}
memset(ans,0,sizeof(ans));
memset(cont,0,sizeof(cont));
for(i=1;i<n;i++)
{
for(j=i-1;j>=0;j--)
if(ch[i]>ch[j])
cont[i]++;
}
for(i=0;i<n;i++)
{
mult(a,b[n-i-1],ch[i]-'A'-cont[i]);
addl(ans,a);
}
outl(ans);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator