Submission #625419

#TimeUsernameProblemLanguageResultExecution timeMemory
625419AugustynJJOOII 2 (JOI20_ho_t2)C++14
100 / 100
8 ms3036 KiB
#include <bits/stdc++.h>
using namespace std;
int n,k,odp=INT_MAX,ile[3],gdzie[3],pref[200001][3];
char ciag[200001];
int main()
{
	scanf("%d%d",&n,&k);
	char wcz=getchar();
	while(wcz!='J'&&wcz!='O'&&wcz!='I')
		wcz=getchar();
	for(int i=1;i<=n;++i)
	{
		ciag[i]=wcz;
		for(int j=0;j<3;++j)
			pref[i][j]=pref[i-1][j];
		if(ciag[i]=='J')
			++pref[i][0];
		else if(ciag[i]=='O')
			++pref[i][1];
		else
			++pref[i][2];
		wcz=getchar();
	}
	while(ile[0]<k)
	{
		++gdzie[0];
		if(gdzie[0]>n)
		{
			printf("-1");
			return 0;
		}
		if(ciag[gdzie[0]]=='J')
			++ile[0];
	}
	gdzie[1]=gdzie[0];
	while(ile[1]<k)
	{
		++gdzie[1];
		if(gdzie[1]>n)
		{
			printf("-1");
			return 0;
		}
		if(ciag[gdzie[1]]=='O')
			++ile[1];
	}
	gdzie[2]=gdzie[1];
	while(ile[2]<k)
	{
		++gdzie[2];
		if(gdzie[2]>n)
		{
			printf("-1");
			return 0;
		}
		if(ciag[gdzie[2]]=='I')
			++ile[2];
	}
	odp=gdzie[2]-3*k;
	for(int i=2;i<=n;++i)
	{
		if(ciag[i-1]=='J')
		{
			int gpam=gdzie[0];
			--ile[0];
			while(ile[0]<k)
			{
				++gdzie[0];
				if(gdzie[0]>n)
				{
					printf("%d",odp);
					return 0;
				}
				if(ciag[gdzie[0]]=='J')
					++ile[0];
			}
			if(gdzie[0]>gdzie[1])
			{
				gdzie[1]=gdzie[0];
				ile[1]=0;
			}
			else
			{
				ile[1]-=pref[gdzie[0]][1]-pref[gpam][1];
			}


			gpam=gdzie[1];
			while(ile[1]<k)
			{
				++gdzie[1];
				if(gdzie[1]>n)
				{
					printf("%d",odp);
					return 0;
				}
				if(ciag[gdzie[1]]=='O')
					++ile[1];
			}
			if(gdzie[1]>gdzie[2])
			{
				gdzie[2]=gdzie[1];
				ile[2]=0;
			}
			else
			{
				ile[2]-=pref[gdzie[1]][2]-pref[gpam][2];
			}

			while(ile[2]<k)
			{
				++gdzie[2];
				if(gdzie[2]>n)
				{
					printf("%d",odp);
					return 0;
				}
				if(ciag[gdzie[2]]=='I')
					++ile[2];
			}
		}
		odp=min(odp,gdzie[2]-i+1-3*k);
	}
	printf("%d",odp);
	return 0;
}

Compilation message (stderr)

ho_t2.cpp: In function 'int main()':
ho_t2.cpp:7:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    7 |  scanf("%d%d",&n,&k);
      |  ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...