| ||||||||||
| 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 | |||||||||
AC附代码Source Code
Problem: 3948 User: JiaJunpeng
Memory: 168K Time: 0MS
Language: C++ Result: Accepted
Source Code
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<stdio.h>
#include<cstring>
using namespace std;
char str1[100],str2[100];
int len1,len2,ans[11],mul;
struct pp
{
int fenzi,fenmu;
};
pp mod[11],shang[11],x[11],y[11],temp[11];
void dfs(int id1,int id2,char str[],int coef[11])
{
int i,j,s,p,q,ip1,ip2,ax=-100,cou=0,coef1[11],coef2[11],temp[11]={0};
for(i=0;i<10;i++)
coef[i]=0;
for(i=id1;i<=id2;i++)
{
if(!(str[i]<='9'&&str[i]>='0'))
break;
}
if(i>id2)
{
for(i=id1;i<=id2;i++)
coef[0]=10*coef[0]+str[i]-'0';
return;
}
if(id1==id2)
{
coef[1]=1;
return;
}
for(i=id2;i>=id1;i--)
{
if(str[i]==')')
cou++;
else if(str[i]=='(')
cou--;
if(cou==0&&(str[i]=='+'||str[i]=='-'))
{
if(ax<2)
{
ax=2;
ip1=i-1;
ip2=i+1;
}
}
else if(cou==0)
{
if(i>id1&&((str[i-1]==')'&&str[i]=='(')||(str[i-1]<='9'&&str[i-1]>='0'&&(str[i]=='x'||str[i]=='('))||(str[i-1]=='x'&&str[i]=='(')))
{
if(ax<1)
{
ax=1;
ip1=i-1;
ip2=i;
}
}
else if(str[i]=='^')
{
if(ax<0)
{
ax=0;
ip1=i-1;
ip2=i+1;
}
}
}
}
if(ax==-100&&str[id1]=='-')
{
dfs(id1+1,id2,str,coef);
for(i=0;i<10;i++)
coef[i]=-coef[i];
return;
}
if(ax==-100)
dfs(id1+1,id2-1,str,coef);
else
{
dfs(id1,ip1,str,coef1);
dfs(ip2,id2,str,coef2);
if(ax==2)
{
for(i=0;i<10;i++)
{
if(str[ip1+1]=='+')
coef[i]=coef1[i]+coef2[i];
else
coef[i]=coef1[i]-coef2[i];
}
}
else if(ax==1)
{
for(i=0;i<10;i++)
for(j=0;j<=i;j++)
coef[i]+=coef1[j]*coef2[i-j];
}
else if(ax==0)
{
coef[0]=1;
for(i=0;i<coef2[0];i++)
{
for(j=0;j<10;j++)
temp[j]=0;
for(j=0;j<10;j++)
for(s=0;s<=j;s++)
temp[j]+=coef[s]*coef1[j-s];
for(j=0;j<10;j++)
coef[j]=temp[j];
}
}
}
}
int gcd(int x,int y)
{
int temp;
while(x%y)
{
temp=x%y;
x=y;
y=temp;
}
return y;
}
int lcm(int x,int y)
{
return x*y/gcd(x,y);
}
int main()
{
int i,j,s,p,q,coef[2][11],id1,id2,d;
while(scanf("%s",str1)&&str1[0]!='.')
{
scanf("%s",str2);
len1=strlen(str1);
len2=strlen(str2);
dfs(0,len1-1,str1,coef[0]);
dfs(0,len2-1,str2,coef[1]);
for(i=0;i<10;i++)
{
x[i].fenzi=coef[0][i];
x[i].fenmu=1;
y[i].fenzi=coef[1][i];
y[i].fenmu=1;
}
id1=id2=9;
while(coef[0][id1]==0)
id1--;
while(coef[1][id2]==0)
id2--;
while(true)
{
if(id1<id2)
{
for(i=0;i<10;i++)
swap(x[i],y[i]);
swap(id1,id2);
continue;
}
int nid1=id1,nid2=id2;
while(id1>=id2)
{
shang[id1-id2].fenzi=x[id1].fenzi*y[id2].fenmu;
shang[id1-id2].fenmu=x[id1].fenmu*y[id2].fenzi;
d=gcd(shang[id1-id2].fenzi,shang[id1-id2].fenmu);
shang[id1-id2].fenzi/=d;
shang[id1-id2].fenmu/=d;
for(i=id2;i>=0;i--)
{
temp[i+id1-id2].fenzi=shang[id1-id2].fenzi*y[i].fenzi;
temp[i+id1-id2].fenmu=shang[id1-id2].fenmu*y[i].fenmu;
d=gcd(temp[i+id1-id2].fenzi,temp[i+id1-id2].fenmu);
temp[i+id1-id2].fenzi/=d;
temp[i+id1-id2].fenmu/=d;
}
for(i=id1-id2-1;i>=0;i--)
{
temp[i].fenzi=0;
temp[i].fenmu=1;
}
for(i=id1;i>=0;i--)
{
mod[i].fenzi=x[i].fenzi*temp[i].fenmu-x[i].fenmu*temp[i].fenzi;
mod[i].fenmu=x[i].fenmu*temp[i].fenmu;
d=gcd(mod[i].fenzi,mod[i].fenmu);
mod[i].fenzi/=d;
mod[i].fenmu/=d;
}
while(id1>=0&&mod[id1].fenzi==0)
id1--;
for(i=id1;i>=0;i--)
x[i]=mod[i];
}
if(id1<0)
break;
}
mul=1;
for(i=0;i<=id2;i++)
{
if(y[i].fenmu==0)
continue;
mul=lcm(y[i].fenmu,mul);
}
for(i=0;i<=id2;i++)
ans[i]=(mul/y[i].fenmu)*y[i].fenzi;
d=ans[0];
for(i=0;i<=id2;i++)
{
if(ans[i]==0)
continue;
d=gcd(d,ans[i]);
}
for(i=0;i<=id2;i++)
ans[i]/=d;
if(ans[id2]<0)
{
for(i=id2;i>=0;i--)
ans[i]=-ans[i];
}
for(i=id2;i>=0;i--)
{
if(ans[i]>0)
{
if(i!=id2)
putchar('+');
if(abs(ans[i])!=1||i==0)
printf("%d",ans[i]);
}
else if(ans[i]<0)
{
putchar('-');
if(abs(ans[i])!=1||i==0)
printf("%d",abs(ans[i]));
}
if(i!=0&&ans[i]!=0)
{
putchar('x');
if(i>1)
printf("^%d",i);
}
}
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