第十点wa求助
查看原帖
第十点wa求助
534794
Clot230王凯正楼主2021/10/16 19:33
#include <bits/stdc++.h>
#define ll long long

using namespace std;

const int N = 1e5 + 9;

bool vis[N];
string s;
ll t, l;
ll donum;
char ch;
struct pro
{
	string name;
	string chu, end;
	ll nchu, nend;
}bf[N];
int main()
{
	scanf("%lld", &t);
	while(t--)
	{
		ll ans = 0;
		scanf("%lld", &l);
		ll len = l;
		cin >> s;
		if(s[2] == '1' && s[3] == ')')
			donum = 0;
		else
		{
			donum = 0;
			ll j = 4;
			while(s[j] != ')')
			{
				donum = donum*10 + s[j] - '0';
				j++;
			}
		}
		ll cnt = 0;
		bool flag = true, bj = false; // flag循环是否可行
		ll sum = 0;  // 几层嵌套的循环
		stack <int> ph; // 语法
		map <string, bool>  bian;  // 记录变量重复 
		for(int i = 1; i <= len; i++)
		{
			if(ph.empty())
			{
				flag = true;
				cnt = 0;
			}
		//	scanf("%c", &ch);
			cin >> ch;
	//		printf("%c ** \n", ch);
			if(ch == 'F')
			{
				cin >> bf[i].name;
				cin >> bf[i].chu;
				cin >> bf[i].end;
				ph.push(i);
				sum++;
				string zchu = bf[i].chu, zend = bf[i].end;
				for(int j = 0; j < zchu.size(); j++)
					bf[i].nchu = bf[i].nchu*10 + zchu[j] - '0';
				for(int j = 0; j < zend.size(); j++)
					bf[i].nend = bf[i].nend*10 + zend[j] - '0';
				
				if(bian[bf[i].name])
					bj = true;
				bian[bf[i].name] = true;
//				if(bf[i].chu != n && bf[i].end != n && flag)
//					cnt++;
//				if(bf[i].chu == n && bf[i].end == n && flag)
//					cnt++;
//				if(bf[i].chu != n && bf[i].end == n && flag)
//					ans = max(sum - cnt, ans);
//				if(bf[i].chu == n && bf[i].end != n)
//					flag = false;
//				if(bf[i].chu != n && bf[i].end != n && bf[i].chu > bf[i].end)
//					flag = false;
			//	printf("%lld *** %lld *** %lld", donum, ans, sum)
				if(bf[i].chu == "n" && bf[i].end != "n")
					flag = false;
				if(bf[i].chu != "n" && bf[i].end != "n" && bf[i].chu > bf[i].end)
					flag = false;;
				if(bf[i].chu != "n" && bf[i].end != "n" && flag)
					cnt++;
				if(bf[i].chu == "n" && bf[i].end == "n" && flag)
					cnt++;
				if(bf[i].chu != "n" && bf[i].end == "n" && flag)
					ans = max(sum - cnt, ans);
				
			}
			if(ch == 'E')
			{
				if(!ph.empty())
				{
					bian[bf[ph.top()].name] = false;
					ph.pop();
					sum--;
				}
				else
				{
					bj = true;
				}
			}
		
		}
//		printf("%lld *** %lld", donum, ans);
		if(bj)
		{
			printf("ERR\n");
			continue;
		}
		if(len%2 || !ph.empty())
		{
			printf("ERR\n");
			continue;
		}
		if(ans == donum)
		{
			printf("Yes\n");
			continue;
		}
		else
		{
			printf("No\n");
			continue;
		}
	}
}
2021/10/16 19:33
加载中...