100472024-03-25 19:52:22111Nemzetközi Rántott Hús Fesztiválcpp17Időlimit túllépés 56/100595ms178080 KiB
#include <bits/stdc++.h>
using namespace std;

// #define int long long

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N;
	cin>>N;
	string S;
	cin>>S;
	vector<int>vk(N+1),vh(N+1),w(N+1),f(1);
	for(int i=0;i<N;i++){
		if(S[i]=='M'){
			f.push_back(i);
		}
		vk[i+1]=(S[i]!='H'?vk[i]+1:vk[i]-1);
		vh[i+1]=(S[i]!='K'?vh[i]-1:vh[i]+1);
		w[i+1]=w[i]+(S[i]=='M');
	}
	vector<array<int,20>>tk(N+1),th(N+1);
	for(int i=0;i<N+1;i++){
		tk[i][0]=vk[i];
		th[i][0]=vh[i];
	}
	for(int j=1;j<20;j++){
		for(int l=0,r=1<<j-1;r<N+1;l++,r++){
			tk[l][j]=min(tk[l][j-1],tk[r][j-1]);
			th[l][j]=min(th[l][j-1],th[r][j-1]);
		}
	}
	auto qk=[&](int l,int r)->int{
		int i=__lg(r-l);
		return min(tk[l][i],tk[r-(1<<i)][i]);
	};
	auto qh=[&](int l,int r)->int{
		int i=__lg(r-l);
		return min(th[l][i],th[r-(1<<i)][i]);
	};
	for(int i=0;i<N;i++){
		int b=qk(i+1,N+1)-vk[i]>=0;
		if(b){
			int a=0;
			int c=0;
			int d=0;
			for(int j=i;j<N;j++){
				char C=S[j];
				if(C=='H'){
					if(c==0){
						if(d==0){
							break;
						}
						else{
							c++;
							d--;
						}
					}
					else{
						c--;
						a++;
					}
				}
				if(C=='K'){
					c++;
				}
				if(C=='M'){
					if(c==0){
						c++;
					}
					else{
						a++;
						c--;
						d++;
					}
				}
			}
			cout<<a<<' ';
		}
		else{
			int l=i+1,h=N;
			while(l<h){
				int m=(l+h)/2;
				if(qk(i+1,m+1)-vk[i]>=0){
					l=m+1;
				}
				else{
					h=m;
				}
			}
			cout<<(l-1-i)/2<<' ';
		}
		// int canFinish=1;
		// {
			// int c=0;
			// for(int j=i;j<N;j++){
				// char C=S[j];
				// if(C=='M')C='K';
				// if(C=='H'){
					// if(c==0){
						// canFinish=0;
					// }
					// else{
						// c--;
					// }
				// }
				// if(C=='K'){
					// c++;
				// }
			// }
		// }
		// if(canFinish!=b)exit(1);
	}
	cout<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
2Elfogadva48ms3780 KiB
subtask27/7
3Elfogadva3ms2292 KiB
4Elfogadva3ms2468 KiB
subtask39/9
5Elfogadva8ms4136 KiB
6Elfogadva4ms4348 KiB
7Elfogadva32ms4756 KiB
subtask40/14
8Időlimit túllépés545ms171992 KiB
9Időlimit túllépés573ms172392 KiB
10Időlimit túllépés564ms172384 KiB
11Időlimit túllépés584ms172372 KiB
12Időlimit túllépés563ms172272 KiB
13Időlimit túllépés582ms172224 KiB
14Időlimit túllépés595ms172528 KiB
15Időlimit túllépés579ms172812 KiB
subtask511/11
16Elfogadva3ms4592 KiB
17Elfogadva3ms4392 KiB
18Elfogadva3ms4404 KiB
subtask629/29
19Elfogadva54ms6036 KiB
20Elfogadva50ms6028 KiB
21Elfogadva28ms6180 KiB
22Elfogadva25ms6380 KiB
subtask70/30
23Időlimit túllépés573ms174868 KiB
24Időlimit túllépés583ms174852 KiB
25Időlimit túllépés566ms174648 KiB
26Időlimit túllépés595ms175352 KiB
27Időlimit túllépés587ms175760 KiB
28Időlimit túllépés588ms176144 KiB
29Időlimit túllépés578ms176264 KiB
30Időlimit túllépés561ms175200 KiB
31Időlimit túllépés595ms175744 KiB
32Időlimit túllépés575ms177308 KiB
33Időlimit túllépés579ms177756 KiB
34Időlimit túllépés578ms178080 KiB
35Időlimit túllépés579ms177976 KiB
36Időlimit túllépés568ms173728 KiB
37Időlimit túllépés582ms173856 KiB
38Időlimit túllépés587ms173780 KiB
39Időlimit túllépés588ms173756 KiB
40Időlimit túllépés587ms177764 KiB