请问第八组数据有什么神奇的坑点吗
查看原帖
请问第八组数据有什么神奇的坑点吗
288716
lzqy_楼主2021/2/17 08:23

rt,一直过不去第八组,求Hack/查错

#include<bits/stdc++.h>
using namespace std;
string ss;
char s[1001];
int n;
int tong[31],nn;
struct p
{
	int zhi,xi;
}A[10001],B[10001],ans[10001];
int cnt,ccnt,Cnt;
int getshu(int &i)
{
	int x=0;
	for(;s[i]>='0'&&s[i]<='9'&&i<n;i++)
		x=(x<<1)+(x<<3)+s[i]-'0';
	return x;
}
int getfu(char c)
{
	if(c=='+') return 1;
    return -1;
}
int main()
{
	while(getline(cin,ss))
	{
		memset(ans,0,sizeof(ans));
		memset(A,0,sizeof(A));
		memset(B,0,sizeof(B));
		nn=ss.length(),n=0;
		cnt=ccnt=Cnt=0;
		for(int i=0;i<nn;i++)
			if(ss[i]!=' ')
				s[n++]=ss[i];
		register int ii=0,xi=0,zhi=0,fu=1;
		for(ii=0;ii<n;ii++)
		{
			if(s[ii]==')'||s[ii]=='(')
				continue;
			if(s[ii]=='*')
			{
				ii++;
				break;
			}
			xi=getshu(ii);
			if(s[ii]!='a')
			{
				tong[0]+=xi;
			}
			if(s[ii]==')'||s[ii]=='(')
			{
				continue;
			}	
			if(s[ii]=='*')
				break;
			if(s[ii]!='a')
				fu=getfu(s[ii]);
			else
				ii+=2,tong[getshu(ii)]+=xi;
		}
		for(int i=0;i<=30;i++)
		{
			if(tong[i])
				cnt++,A[cnt].xi=tong[i],A[cnt].zhi=i;
			tong[i]=0;
		}
		for(;ii<n;ii++)
		{
			if(s[ii]==')'||s[ii]=='(')
				continue;
			if(s[ii]=='*')
				break;
			xi=getshu(ii);
			if(s[ii]!='a')
			{
				tong[0]+=xi;
			}
			if(s[ii]==')'||s[ii]=='(')
			{
				continue;
			}	
			if(s[ii]=='*')
				break;
			if(s[ii]!='a')
				fu=getfu(s[ii]);
			else
				ii+=2,tong[getshu(ii)]+=xi;
		}
		for(int i=0;i<=30;i++)
		{
			if(tong[i])
				ccnt++,B[ccnt].xi=tong[i],B[ccnt].zhi=i;
			tong[i]=0;
		}
		for(int i=1;i<=cnt;i++)
			for(int j=1;j<=ccnt;j++)
				tong[A[i].zhi+B[j].zhi]+=A[i].xi*B[j].xi;
		for(int i=0;i<=30;i++)
		{
			if(tong[i])
				Cnt++,ans[Cnt].xi=tong[i],ans[Cnt].zhi=i;
			tong[i]=0;
		}
		if(ccnt>0)
		{
			cout<<ans[Cnt].xi;
			if(ans[Cnt].zhi!=0)
				cout<<"a^"<<ans[Cnt].zhi;
			for(int i=Cnt-1;i>=1;i--)
			{
				if(ans[i].xi>0)
					cout<<"+";
				cout<<ans[i].xi;
				if(ans[i].zhi!=0)
					cout<<"a^"<<ans[i].zhi;
			}
		}
		else
		{
			for(int i=0;i<n;i++)
				cout<<s[i];
//			cout<<A[cnt].xi;
//			if(A[cnt].zhi!=0)
//				cout<<"a^"<<A[cnt].zhi;
//			for(int i=cnt-1;i>=1;i--)
//			{
//				if(A[i].xi>0)
//					cout<<"+";
//				cout<<A[i].xi;
//				if(A[i].zhi!=0)
//					cout<<"a^"<<A[i].zhi;
//			}
		}
		cout<<endl;
	}
	return 0;
}
2021/2/17 08:23
加载中...