求助P1054
查看原帖
求助P1054
230394
wqqe223楼主2021/10/7 18:00
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<map>
#include<stack>
#include<queue>
using namespace std;
typedef long long ll;
map<char,ll>list;
const ll INF=0x3fffffff;
const ll mo=10440647;
void deal(string& s)
{
	string s1;
	for(ll i=0;i<s.length();i++)
	{
		if(s[i]==' ')continue;
		s1+=s[i];
	}
	s=s1;
	return;
}
stack<char>sign;
stack<string>stk[30];
ll toint(string s)
{
	ll num=0;
	for(int i=0;i<s.length();i++)
	{
		num=(num*10+s[i]-'0')%mo;
	}
	return num;
}
void change(string s,ll index)
{
	stack<string>s2;
	for(int i=0;i<s.length();i++)
	{
		if(s[i]=='a')
		{
			string k;
			k+=s[i]; 
			s2.push(k);
		}
		else if(s[i]>='0'&&s[i]<='9')
		{
			ll j;
			string s1;
			for(j=i;s[j]<='9'&&s[j]>='0';j++)
			{
				s1+=s[j];
			}
			i=j-1;
			s2.push(s1);
		}
		else
		{
			if(s[i]==')')
			{
				while(sign.top()!='(')
				{
					string k;
					k+=sign.top();
					s2.push(k);
					sign.pop();
				}
				sign.pop();
			}
			else
			{
				while(!sign.empty()&&list[s[i]]<=list[sign.top()]&&sign.top()!='(')
				{
					string k;
					k+=sign.top();
					s2.push(k);
					sign.pop();
				}
				sign.push(s[i]);
			}
		}
	}
	while(!sign.empty())
	{
		string k;
		k+=sign.top(); 
		s2.push(k);
		sign.pop();
	}
	while(!s2.empty())
	{
		stk[index].push(s2.top());
		s2.pop();
	}
	return;
}
void init()
{
	list['+']=0;
	list['-']=0;
	list['*']=1;
	list['/']=1;
	list['^']=2;
	list['(']=INF;
	return;
}
ll p(ll a,ll b)
{
	ll num=1;
	for(int i=1;i<=b;i++)
	{
		num=(num*a)%mo;
	}
	return num;
}
ll get(ll index,ll value)
{
	stack<ll>st;
	stack<string>q;
	while(!stk[index].empty())
	{
		string s=stk[index].top();
		q.push(stk[index].top());
		stk[index].pop(); 
		if(s[0]>='0'&&s[0]<='9')
		{
			st.push(toint(s));
		}
		else if(s[0]=='a')
		{
			st.push(value);
		}
		else
		{
			ll num2=st.top();
			st.pop();
			ll num1=st.top();
			st.pop();
			if(s[0]=='+')
			{
				st.push((num1+num2)%mo);
			}
			else if(s[0]=='-')
			{
				st.push((num1-num2)%mo);
			}
			else if(s[0]=='*')
			{
				st.push((num1*num2)%mo);
			}
			else
			{
				st.push(p(num1,num2));
			}
		}
	}
	while(!q.empty())
	{
		stk[index].push(q.top());
		q.pop();
	}
	return st.top()%mo;
}
string arr[30];
ll book[30];
int main()
{
	init();
	string s;
	getline(cin,s);
	deal(s);
	change(s,0);
	ll n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		getline(cin,arr[i]);
		deal(arr[i]);
		change(arr[i],i);
	}
	getline(cin,arr[n]);
	deal(arr[n]);
	change(arr[n],n);
	for(int i=1;i<=500;i++)
	{
		ll value=get(0,i);
		for(int j=1;j<=n;j++)
		{
			ll v1=get(j,i);
			if(v1!=value)book[j]=true;
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(!book[i])
		{
			char letter='A'+i-1;
			cout<<letter;
		}
	}
	return 0;
}

本地可过提交全RE

2021/10/7 18:00
加载中...