204242026-01-06 18:10:42horkaBlokk eliminációcpp17Wrong answer 28/5017ms2348 KiB
#include <bits/stdc++.h>
using namespace std;
void solve()
{
	string s; cin>>s;
	vector<int> v{0};
	int curr=1;
	for(int i=1; i<s.size(); i++)
	{
		if(s[i]!=s[i-1])
		{
			v.push_back(min(curr,2));
			curr=0;
		}
		curr++;
	}
	int n=v.size();
	v.push_back(min(curr,2));
	array<int, 2> egy,ket;
	egy[0]=egy[1]=0;
	ket[0]=n+100,ket[1]=0;
	int db1=0,db2=0;
	for(int i=1; i<=n; i++)
	{
		if(v[i]==1) db1++;
		else db2++;
	}
	/*for(int i=1; i<=n; i++)
		cout<<v[i]<<" ";
	cout<<endl;*/
	for(int i=1; i<=n; i++)
	{
		array<int, 2> uj1{n+100,0},uj2{n+100,0};
		if(v[i]==1)
		{
			if(ket[0]<=ket[1]) uj1[0]=ket[0]+2,uj1[1]=ket[1]+2;
			if(egy[0]<=egy[1]) uj1[0]=min(uj1[0],egy[0]+1),uj1[1]=max(uj1[1],egy[1]+1);
			if(ket[0]<=ket[1] && ket[1]>0)
			{
				uj2[0]=max(0,ket[0]-1);
				uj2[1]=ket[1]-1;
			}
		}
		else
		{
			if(ket[0]<=ket[1] && ket[1]>0)
			{
				uj2[0]=max(0,ket[0]-1);
				uj2[1]=ket[1]-1;
			}
			//ha nem toroljuk ki
			if(ket[0]<=ket[1]) uj2[0]=min(uj2[0],ket[0]+1),uj2[1]=max(uj2[1],ket[1]+1);
			if(egy[0]<=egy[1]) uj2[0]=min(uj2[0],egy[0]),uj2[1]=max(uj2[1],egy[1]);
		}
		ket=uj2,egy=uj1;
		//cout<<i<<": "<<ket[0]<<" "<<ket[1]<<" "<<endl;
	}
	//cout<<n<<endl;
	cout<<(ket[0]<=ket[1] && ket[0]<=0?"IGEN\n":"NEM\n");
}
int main() {
	ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

	int t=1; cin>>t;
	while(t--) solve();
}
SubtaskSumTestVerdictTimeMemory
base28/50
1Accepted0/01ms544 KiB
2Accepted0/016ms2164 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms316 KiB
5Accepted2/21ms368 KiB
6Wrong answer0/21ms316 KiB
7Wrong answer0/21ms316 KiB
8Accepted2/21ms316 KiB
9Wrong answer0/21ms316 KiB
10Accepted2/21ms508 KiB
11Accepted2/21ms316 KiB
12Wrong answer0/21ms316 KiB
13Accepted2/21ms316 KiB
14Accepted2/22ms640 KiB
15Wrong answer0/32ms564 KiB
16Accepted3/32ms788 KiB
17Accepted3/317ms2348 KiB
18Wrong answer0/314ms2284 KiB
19Accepted3/317ms2204 KiB
20Accepted3/317ms2348 KiB
21Wrong answer0/414ms2340 KiB
22Wrong answer0/417ms2176 KiB