关于错误“too long on line 1”
查看原帖
关于错误“too long on line 1”
933530
Tim0509楼主2023/4/29 17:01
#include<bits/stdc++.h>
#define MP make_pair
#define PII pair<ll,ll>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
typedef long long ll;
const ll INF=0x3f3f3f3f;
string str;
string trans;
ll ans[1005];
stack<char>st;
stack<PII>stk;
map<char,ll>mp;
void init(){
	mp['^']=3;
	mp['*']=mp['/']=2;
	mp['+']=mp['-']=1;
	mp['(']=mp[')']=0;
}
void print(){
	for(ll i=1;i<=trans.length();i++){
		if(ans[i]==-6)continue;
		else if(ans[i]==-1)putchar('+');
		else if(ans[i]==-2)putchar('-');
		else if(ans[i]==-3)putchar('*');
		else if(ans[i]==-4)putchar('/');
		else if(ans[i]==-5)putchar('^');
		else printf("%lld",ans[i]);
		if(i!=trans.length())putchar(' ');
	}
	putchar('\n');
}
int main(){
	init();
	getline(cin,str);
	for(ll i=0;i<str.length();i++){
		if(str[i]>='0'&&str[i]<='9')trans+=str[i];
		else if(str[i]=='(')st.push('(');
		else if(str[i]==')'){
			if(!st.empty()){
				while(st.top()!='('){
					trans+=st.top();
					st.pop();
					if(st.empty())break;
				}
				st.pop();
			}
		}else if(str[i]=='^')st.push('^');
		else{
			if(!st.empty()){
				while(mp[st.top()]>=mp[str[i]]){
					trans+=st.top();
					st.pop(); 
					if(st.empty())break;
				}
			}
			st.push(str[i]);
		}
	}
	while(!st.empty())trans+=st.top(),st.pop();
//	cout<<trans<<endl; 
	for(ll i=0;i<trans.size();i++){
		if(trans[i]>='0'&&trans[i]<='9')ans[i+1]=trans[i]-'0';
		else if(trans[i]=='+')ans[i+1]=-1;
		else if(trans[i]=='-')ans[i+1]=-2;
		else if(trans[i]=='*')ans[i+1]=-3;
		else if(trans[i]=='/')ans[i+1]=-4;
		else if(trans[i]=='^')ans[i+1]=-5;
	}
	print();
	for(ll i=1;i<=trans.length();i++){
		if(ans[i]>=0)stk.push(MP(ans[i],i));
		else{
			ll t1=stk.top().first,t3=stk.top().second;
			stk.pop();
			ll t2=stk.top().first,t4=stk.top().second;
			stk.pop();
			ans[t3]=ans[t4]=-6;
			if(ans[i]==-1)ans[i]=t1+t2;
			else if(ans[i]==-2)ans[i]=t2-t1;
			else if(ans[i]==-3)ans[i]=t2*t1;
			else if(ans[i]==-4)ans[i]=t2/t1;
			else if(ans[i]==-5){
				ans[i]=1;
				for(ll j=1;j<=t1;j++)ans[i]*=t2;
			}
			stk.push(MP(ans[i],i));
			print();
		}
	}
	return 0;
}

提交这个代码,第二个子任务对了

但是第一个子任务的所有测试点均WA+错误“too long on line 1”

求助路过的大佬

2023/4/29 17:01
加载中...