2009年11月21日 星期六

TIOJ 1582 A TRIVIAL physical problem

poao899    0K    150MS    G++     1.18K     2009-11-19 16:57:37                        .

排序大賽最陰險的一題(汗


超糟糕的輸入本來想練習scanf的不過最後還是gets()進來慢慢處理

//**********************

#include<stdio.h>
#include<algorithm>
struct mul{
int base,exp;
bool operator<(const mul &b)const{
return exp>b.exp||exp==b.exp&&base>b.base;
}
}Mu[1000];
int cnt;
void set(int b,int e){
mul *p=&Mu[cnt];
p->base=b;
p->exp=e;
}
char in[10000];
main(){
gets(in);
int base,exp,s;
for(int i=0;in[i];cnt++){
base=0;
exp=0;
s=1;
if(in[i]=='-'){s=-1;i++;}
if(in[i]=='+'){i++;}
if(in[i]=='x'){base=1;}
for(;in[i]!='x'&&in[i]!='-'&&in[i]!='+'&&in[i];i++){
base=base*10+in[i]-48;
}
base*=s;
if(in[i]==0)break;
if(in[i]!='x'){cnt--;continue;}
i++;
if(in[i]!='^'){set(base,1);continue;}
i++;
s=1;
if(in[i]=='-'){s=-1;i++;}
if(in[i]=='+')i++;
for(;in[i]!='-'&&in[i]!='+'&&in[i];i++){
exp=exp*10+in[i]-48;
}
exp*=s;
//printf("<base%d exp%d>\n",base,exp);
if(!exp){cnt--;continue;}
set(base,exp);
}
if(!cnt)putchar('0');
else{
std::sort(Mu,Mu+cnt);
for(int i=0;i<cnt;i++){
int b=Mu[i].base;
int e=Mu[i].exp;
if(b*e>0&&i)putchar('+');
printf("%d",b*e);
if(e-1!=0){
putchar('x');
if(e-1!=1){
putchar('^');
printf("%d",e-1);
}
}
}
}
puts("");
}


沒有留言:

張貼留言