求hack 50分 【会关注】
查看原帖
求hack 50分 【会关注】
399993
haraki楼主2021/4/20 18:26

5AC 5WA

代码求调

#include<bits/stdc++.h>

using namespace std;
long long started=0,v[27];
long long proi(char c){
	if(c=='+'||c=='-')return 1;
	else if(c=='*'||c=='/')return 2;
	else if(c=='('||c==')')return 0;
}
string tosuf(string s){
	string r="";
	stack<char>st;
	for(long long i=0;i<s.size();i++){
		if(isdigit(s[i])||isalpha(s[i]))r+=s[i];
		else if(s[i]=='(')r+=' ',st.push(s[i]);
		else if(s[i]==')') {
			r+=' ';
			while(st.top()!='(')r+=st.top(),st.pop();
			st.pop();
		}else{
			r+=' ';
			while(!st.empty()&&proi(st.top())>=proi(s[i]))r+=st.top(),st.pop();
			st.push(s[i]);
		}
	}
	r+=' ';
	while(!st.empty())r+=st.top(),st.pop();
	return r;
}
long long _calc(string s){
	string k=tosuf(s);
	stack<long long>ans;
	bool dig=0;long long d=0;
	for(long long i=0;i<k.size();i++){
		if(isdigit(k[i])){
//			cout<<k[i]<<" ";
			d=d*10+k[i]-'0';
			if(!dig)dig=1;
//			cout<<d<<" "<<dig<<endl;
		}else if(isalpha(k[i])){
			ans.push(v[k[i]-'a']);
		}else{
			if(dig==1)ans.push(d);
//			cout<<"push:"<<d<<endl;
			d=0,dig=0;
			if(k[i]=='+'||k[i]=='-'||k[i]=='*'||k[i]=='/'){
				long long ai=ans.top();ans.pop();
				long long bi=ans.top();ans.pop();
//				cout<<ai<<" "<<bi<<endl;
				if(k[i]=='+')ans.push(ai+bi);
				if(k[i]=='-')ans.push(bi-ai);
				if(k[i]=='*')ans.push(ai*bi);
				if(k[i]=='/')ans.push(bi/ai);
			}	
		}
	}
	return ans.top();
}
vector<string>lp;
int main(){
//	freopen("x.txt","r",stdin);
	string  cmd;
	while(cin>>cmd){
//        if(cmd=="666")break;
		lp.push_back(cmd);
	}
	long long now=0;
	stack<long long>lpstart;
	stack<long long>times;
	while(now!=lp.size()-1){
//		cout<<"now:"<<now<<"    "<<lp[now]<<endl;
		if(lp[now][1]=='='){
			v[lp[now][0]-'a']=_calc(lp[now].substr(2));
			now++;
		}else if(lp[now]=="write"){
			now++;
			cout<<_calc(lp[now])<<endl;
			now++;
		}else if(lp[now]=="loop"){
			lpstart.push(now);
			times.push(1);
			now+=2;
		}else if(lp[now]=="end"){
			long long lasttop=_calc(lp[lpstart.top()+1]);
//			cout<<"lasttop:"<<lasttop<<endl;
//			cout<<"timestop:"<<times.top()<<endl;
			if(times.top()!=lasttop){
				times.top()++;
				now=lpstart.top()+2;
			}else{
				times.pop();
				lpstart.pop();
				now++;
			}
		}else if(lp[now]=="continue"){
			
			times.top()++;
			long long lasttop=_calc(lp[lpstart.top()+1]);
//			cout<<"lasttop:"<<lasttop<<endl;
//			cout<<"timestop:"<<times.top()<<endl;
			if(times.top()==lasttop+1){
				times.pop();
				lpstart.pop();
				long long mlp=0;
				while(mlp!=-1){
					if(lp[now]=="loop")mlp++;
					else if(lp[now]=="end")mlp--;
					now++;
				}
			}else{
				now=lpstart.top()+2;
			}
			
		}else if(lp[now]=="break"){
			long long mlp=0;
			while(mlp!=-1){
				if(lp[now]=="loop")mlp++;
				else if(lp[now]=="end")mlp--;
				now++;
			}
		}else now++;
	}
}

求hack/帮助

有用的回答会关注的

2021/4/20 18:26
加载中...