MnZn求问
查看原帖
MnZn求问
214728
剑雪清寒楼主2021/8/15 10:41

这为什么会WA

#include <bits/stdc++.h>
using namespace std;
#define F(i,a,b) for(int i=a;i<=b;i++)
#define uF(i,a,b) for(int i=a;i>=b;i--)
#define nF(i,a,b) for(int i=a;i<b;i++)
#define unF(i,a,b) for(int i=a;i>b;i--)
inline int read() {
	int x,f;char ch;
	for(f=0;!isdigit(ch=getchar());f=ch=='-');
	for(x=ch-48;isdigit(ch=getchar());x=x*10+ch-48);
	return f?-x:x;
}
inline void print(long long x){
	if(x==0) {
		putchar('0');
//		putchar(' ');
		return ;
	}
	if(x<0) putchar('-'),x=-x;
	int linshi[22],k=0;
	while(x) linshi[++k]=x%10,x/=10;
	while(k) putchar(linshi[k--]+48);
//	putchar(' ');
	return ;
}
struct qs{
	long long yxj=0;
	char name;
	bool operator >(const qs &lipu) const {
		return yxj>lipu.yxj;
	}
	/*bool operator <(const qs &lipu) const {
		return yxj<lipu.yxj;
	}
	bool operator <=(const qs &lipu) const {
		return yxj<=lipu.yxj;
	}*/
};
struct thetring {
	long long size;
	bool if_sum=false;
};
int main() {
	int khs=0;
	string k;
	cin>>k;
	stack<qs>z1;
	int uslen=0;
	thetring used[110];
//	stack<int>sum;
	nF(i,0,k.length()) {
		if(isdigit(k[i])) {
			used[++uslen].size=k[i]-'0';
			used[uslen].if_sum=true;
			putchar(k[i]);putchar(' ');
		}else {
			if(k[i]=='(') khs++;
			else if(k[i]==')') khs--;
			else {
				qs ls;
				if(k[i]=='+' || k[i]=='-') ls.yxj=1;
				else if(k[i]=='*' || k[i]=='/') ls.yxj=2;
				else ls.yxj=3;
				ls.yxj+=khs*5;
				ls.name=k[i];
				while(!z1.empty()) {
					if(ls>z1.top()) break;
					used[++uslen].size=(z1.top()).name;
					used[uslen].if_sum=false;
					putchar((z1.top()).name);
					putchar(' ');
					z1.pop();
				}
				z1.push(ls);
			}
		}
		if(i==k.length()-1) {
			used[++uslen].size=(z1.top()).name;
			used[uslen].if_sum=false;
			putchar((z1.top()).name);
		}
	}
	/*putchar('\n');
	F(i,1,uslen) {
		putchar(used[i].size);
		printf(" >>l:%d,r:%d\n",used[i].left_name,used[i].right_name);
	}*/
	int kk[110],kks=0;
	F(i,1,uslen) {
		if(used[i].if_sum) {
			kk[++kks]=used[i].size;
		}else {
			long long opop=kk[kks--];
			if(used[i].size=='+') kk[kks]+=opop;
			if(used[i].size=='-') kk[kks]-=opop;
			if(used[i].size=='*') kk[kks]*=opop;
			if(used[i].size=='/') kk[kks]/=opop;
			if(used[i].size=='^') kk[kks]=pow(kk[kks],opop);
			putchar('\n');
			F(j,1,kks) print(kk[j]),putchar(' ');
			F(j,i+1,uslen) {
				if(used[j].if_sum) print(used[j].size);
				else putchar(used[j].size);
				putchar(' ');
			}
		}
	}
	return 0;
}

2021/8/15 10:41
加载中...