记录编号 |
16070 |
评测结果 |
AAAAAA |
题目名称 |
多项式运算 |
最终得分 |
100 |
用户昵称 |
.Xmz |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2010-04-19 15:10:35 |
内存使用 |
0.27 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;
long long pow(int i,int j)
{
int re=1;
if (j & 1) re*=i;
j=j>>1;
while (j!=0)
{
i*=i;
if (j & 1) re*=i;
j=j>>1;
}
return re;
}
struct xiang
{
int mi,xi;
};
int cmp(const void *a,const void *b)
{
return -((xiang *)a)->mi+((xiang *)b)->mi;
}
struct shizi
{
int num;
xiang a[501];
long long suan(int i)
{
long long re=0;
for (int j=1;j<=num;j++)
{
re+=a[j].xi*pow(i,a[j].mi);
}
return re;
}
void add(shizi t)
{
for (int i=1;i<=t.num;i++)
{
int j=1;
for (j=1;j<=num;j++)
{
if (a[j].mi==t.a[i].mi)
{
a[j].xi+=t.a[i].xi;
break;
}
}
if (j>num)
{
num++;
a[num].xi=t.a[i].xi;
a[num].mi=t.a[i].mi;
}
}
}
void sub(shizi t)
{
for (int i=1;i<=t.num;i++)
{
int j=1;
for (j=1;j<=num;j++)
{
if (a[j].mi==t.a[i].mi)
{
a[j].xi-=t.a[i].xi;
break;
}
}
if (j>num)
{
num++;
a[num].xi=-t.a[i].xi;
a[num].mi=t.a[i].mi;
}
}
}
void mul(shizi t)
{
shizi st;st.num=0;
for (int i=1;i<=t.num;i++)
{
for (int ii=1;ii<=num;ii++)
{
int j=1;
for (j=1;j<=st.num;j++)
{
if (st.a[j].mi==t.a[i].mi+a[ii].mi)
{
st.a[j].xi+=t.a[i].xi*a[ii].xi;
break;
}
}
if (j>st.num)
{
st.num++;
st.a[st.num].xi=t.a[i].xi*a[ii].xi;
st.a[st.num].mi=t.a[i].mi+a[ii].mi;
}
}
}
num=st.num;
for (int i=1;i<=num;i++)
{
a[i].xi=st.a[i].xi;
a[i].mi=st.a[i].mi;
}
}
void print()
{
qsort(a+1,num,sizeof(a[0]),cmp);
bool yy=false;
for (int i=1;i<=num;i++)
{
if (a[i].xi!=0)
{
if (a[i].xi>0 && yy) printf("+");
if ( (a[i].xi!=1 && a[i].xi!=-1) || a[i].mi==0) printf("%d",a[i].xi);
if (a[i].xi==-1 && !a[i].mi==0) printf("-");
if (a[i].mi==1) printf("x");
else if (a[i].mi) printf("x^%d",a[i].mi);
yy=true;
}
}
if (!yy) printf("0");
printf("\n");
}
}s,t;
char c[10000];
int deshu(int &i)
{
int re=0;
int cc=1;
if (c[i]=='+') {cc=1;i++;}
else if (c[i]=='-') {cc=-1;i++;}
if (!(c[i]>='0' && c[i]<='9')) return cc;
while (c[i]>='0' && c[i]<='9')
{
re*=10;
re+=c[i]-'0';
i++;
}
return re*cc;
}
void zhuan(shizi &tt)
{
int i=0;tt.num=0;
while (i<=(int)strlen(c)-1)
{
tt.num++;
tt.a[tt.num].xi=deshu(i);
if (c[i]!='x')
{
tt.a[tt.num].mi=0;
}
else
{
i++;
if (c[i]!='^') tt.a[tt.num].mi=1;
else
{
i++;
tt.a[tt.num].mi=deshu(i);
}
}
}
}
int main()
{
freopen("ploy.in","r",stdin);
freopen("ploy.out","w",stdout);
scanf("%s",c);
int i=0;
while (c[0]!='l')
{
i++;
printf("%d: ",i);
if (c[0]=='a')
{
scanf("%s",c);
zhuan(s);
do
{
scanf("%s",c);
if (c[0]=='-' && c[1]=='1') break;
zhuan(t);
s.add(t);
}while (c[0]!='-' || c[1]!='1');
s.print();
}
else if (c[0]=='s')
{
scanf("%s",c);
zhuan(s);
do
{
scanf("%s",c);
if (c[0]=='-' && c[1]=='1') break;
zhuan(t);
s.sub(t);
}while (c[0]!='-' || c[1]!='1');
s.print();
}
else if (c[0]=='m')
{
scanf("%s",c);
zhuan(s);
do
{
scanf("%s",c);
if (c[0]=='-' && c[1]=='1') break;
zhuan(t);
s.mul(t);
}while (c[0]!='-' || c[1]!='1');
s.print();
}
else if (c[0]=='e')
{
int ttt;
scanf("%d",&ttt);
scanf("%s",c);
zhuan(s);
cout<<s.suan(ttt)<<endl;
}
scanf("%s",c);
}
return 0;
}