MLE?(48 pts)
查看原帖
MLE?(48 pts)
1144339
forever_Neuer楼主2024/10/14 22:12
#include "bits/stdc++.h"
using namespace std;
string to_string(char x){
	stringstream ss;
	string str;
	ss<<x;
	ss>>str;
	return str;
}
string jh(int x,string str){
	string ans="";
	for(int i=0;i<str.length();i++)
		if(str[i]=='x') ans+=to_string(x);
		else ans+=to_string(str[i]);
	return ans;
}
int find(int x,string str){
	int i=x,q=0;
	while(1){
		if(str[i]==':')
			if(!q) break;else q--;
		if(str[i]=='?') q++;
		i++;
		if(i==str.length()) return i-1;
	}return i;
}
int getnum(int x,int y,string str){
	int sum=0;
	for(int i=x;i<=y;i++)
		if(str[i]>='0' && str[i]<='9') sum=sum*10+str[i]-'0';
	return sum;
}
bool check(int x,int y,string str){
	int p=0;
	char ch=' ';
	for(int i=x;i<=y;i++)
		if(str[i]=='>' || str[i]=='<'){p=i;ch=str[i];break;};
	if(ch=='>') return getnum(x,~-p,str)>getnum(-~p,y,str);
	if(ch=='<') return getnum(x,~-p,str)<getnum(-~p,y,str);
}
int js(int st,int en,string str){
	int f=-1;
	for(int i=st;i<=en;i++)
		if(str[i]=='?'){f=i;break;}
	if(f==-1) return getnum(st,en,str);
	if(check(st,f-1,str)) return js(f+1,find(f+1,str)-1,str);
	return js(find(f+1,str)+1,en,str);
}
int main(void){
	int n,m;
	scanf("%d%d",&n,&m);
	string str1;
	cin>>str1;
	while(m--){
		int x;
		scanf("%d",&x);
		string str=jh(x,str1);
		printf("%d\n",js(0,str.length()-1,str));
	}
}
2024/10/14 22:12
加载中...