| ||||||||||
| 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 | |||||||||
既然大牛附了数据,小弟附上性感代码!In Reply To:帮忙看看数据1349 Posted by:gemenhao at 2006-05-11 20:24:53 #include <iostream>
#include <algorithm>
#include <stdlib.h>
using namespace std;
#define MAXIL 300
#define MAXN 52
#define MAXVL 300
char jie[MAXN][MAXVL];
char A[MAXVL];
char s[MAXN][MAXN];
int stop;
bool first=true;
void ditoa(int n,char *c)
{
if(n==0)
strcpy(c,"0");
else
{
int i=0;
while(n)
{
c[i]=n%10+'0';
n/=10;
i++;
}
c[i]='\0';
std::reverse(c,c+strlen(c));
}
}
int compare(char *a,char *b)
{
int len1=strlen(a),len2=strlen(b);
if(len1==len2)
{
int i=0;
while(i<len1&&a[i]==b[i])
i++;
if(i==len1)
return true;
else
return a[i]-b[i];
}
else
return len1-len2;
}
void add(char a[],char b[],char back[])
{
int i,j,k,up,x,y,z,l;
char *c;
if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2;
c=(char *) malloc(l*sizeof(char));
i=strlen(a)-1;
j=strlen(b)-1;
k=0;up=0;
while(i>=0||j>=0)
{
if(i<0) x='0'; else x=a[i];
if(j<0) y='0'; else y=b[j];
z=x-'0'+y-'0';
if(up) z+=1;
if(z>9) {up=1;z%=10;} else up=0;
c[k++]=z+'0';
i--;j--;
}
if(up) c[k++]='1';
i=0;
c[k]='\0';
for(k-=1;k>=0;k--)
back[i++]=c[k];
back[i]='\0';
}
void mult(char a[],char b[],char s[])
{
const int MAXL=300;
int i,j,k=0,alen,blen,sum=0,res[MAXL][MAXL]={0},flag=0;
char result[MAXL];
alen=strlen(a);blen=strlen(b);
for (i=0;i<alen;i++)
for (j=0;j<blen;j++) res[i][j]=(a[i]-'0')*(b[j]-'0');
for (i=alen-1;i>=0;i--)
{
for (j=blen-1;j>=0;j--) sum=sum+res[i+blen-j-1][j];
result[k]=sum%10;
k=k+1;
sum=sum/10;
}
for (i=blen-2;i>=0;i--)
{
for (j=0;j<=i;j++) sum=sum+res[i-j][j];
result[k]=sum%10;
k=k+1;
sum=sum/10;
}
if (sum!=0) {result[k]=sum;k=k+1;}
for (i=0;i<k;i++) result[i]+='0';
for (i=k-1;i>=0;i--) s[i]=result[k-1-i];
s[k]='\0';
while(1)
{
if (strlen(s)!=strlen(a)&&s[0]=='0')
strcpy(s,s+1);
else
break;
}
}
void init()
{
memcpy(jie[0],"1",sizeof("1"));
char temp[MAXVL];
for(int i=1;i<MAXN;i++)
{
ditoa(i,temp);
mult(jie[i-1],temp,jie[i]);
//printf("%s\n",jie[i]);
}
}
void solve()
{
strcpy(A,"0");
int temp;
char ctemp[MAXVL];
int n=0;
n+=(s[0][0]-'0');
if(s[0][1]!='\0')
{
n=n*10+(s[0][1]-'0');
}
for(int i=1;i<stop;i++)
{
temp=0;
for(int j=i+1;j<=stop;j++)
if(compare(s[i],s[j])>0)
temp++;
ditoa(temp,ctemp);
// printf("ctemp=%s ",ctemp);
mult(ctemp,jie[n-i],ctemp);
// printf("ctemp*jie[n-i]=%s ",ctemp);
add(ctemp,A,A);
//printf("A=%s\n",A);
}
add(A,"1",A);
}
int main()
{
//freopen("c:/aaa.txt","r",stdin);
init();
char str[MAXIL];
int len;
while(gets(str)&&strcmp(str,"-1")!=0)
{
len=strlen(str);
int i=0,c;
stop=-1;
while(i<len)
{
while(i<len&&(str[i]=='('||str[i]==')'||str[i]==','))
i++;
if(i==len) break;
stop++;
c=0;
while(i<len&&str[i]!='('&&str[i]!=')'&&str[i]!=',')
s[stop][c++]=str[i++];
s[stop][c]='\0';
}
if(!first)
printf(",");
solve();
printf("%s",A);
first=false;
}
printf("\n");
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator