远古题目求助
查看原帖
远古题目求助
530797
code_hyx楼主2023/5/4 10:26

好像也不算远古题目......

#include<bits/stdc++.h> 
using namespace std;
string s;
int len,bj[50],lb=0,mt[500005],cnt[500005][30];
void ycl()
{
	stack<int> stk;
	for(int i=0;i<len;i++)
	{
		//cout<<i<<"\n";
		if(s[i]=='(')
		{
			stk.push(i);
		}
		else if(s[i]==')')
		{
			mt[i]=stk.top();
			//cout<<i<<" "<<mt[i]<<"\n";
			stk.pop();
		}
	}
}
int main()
{
	cin>>s;
	len=s.length();
	ycl();
	for(int i=0;i<len;i++)
	{
		for(int j=0;j<26;j++)cnt[i][s[j]-'a']=cnt[i-1][s[j]-'a'];
		if(s[i]>='a'&&s[i]<='z')
		{
			cnt[i][s[i]-'a']=cnt[i-1][s[i]-'a']+1;
		}
		//for(int j=0;j<len;j++)cout<<cnt[j][0]<<" ";
		//cout<<"\n";
	}
	for(int i=0;i<len;i++)
	{
		if(s[i]>='a'&&s[i]<='z')
		{
			//cout<<s[i]-'a'<<" "<<bj[s[i]-'a']<<"\n";
			if(bj[s[i]-'a']>0)
			{
				cout<<"No\n";
				return 0;
			}
			bj[s[i]-'a']++;
		}
		else if(s[i]==')')
		{
			lb=mt[i];
			//cout<<i<<" "<<lb<<"\n";
			int t[30]={0};
			for(int j=0;j<26;j++)
			{
				if(lb>0)t[j]=cnt[i][j]-cnt[lb-1][j];
				else t[j]=cnt[i][j];
				//cout<<j<<" "<<cnt[i][j]<<" "<<cnt[lb-1][j]<<" "<<t[j]<<"\n";
			}
			for(int j=0;j<26;j++)
			{
				bj[j]=max(0,bj[j]-t[j]);
				//cout<<j<<" "<<bj[j]<<"\n";
			}
		}
	}
	cout<<"Yes\n";
	return 0;
}

WA10个,AC14个

2023/5/4 10:26
加载中...