100462024-03-25 19:51:33111Nemzetközi Rántott Hús Fesztiválcpp17Futási hiba 56/100237ms523592 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
1Elfogadva3ms1956 KiB
2Elfogadva48ms5560 KiB
subtask27/7
3Elfogadva3ms2276 KiB
4Elfogadva3ms2492 KiB
subtask39/9
5Elfogadva8ms5852 KiB
6Elfogadva4ms6148 KiB
7Elfogadva32ms6460 KiB
subtask40/14
8Futási hiba231ms523592 KiB
9Futási hiba189ms523564 KiB
10Futási hiba189ms523544 KiB
11Futási hiba232ms523508 KiB
12Futási hiba221ms523488 KiB
13Futási hiba175ms523252 KiB
14Futási hiba222ms523016 KiB
15Futási hiba219ms523000 KiB
subtask511/11
16Elfogadva3ms4328 KiB
17Elfogadva3ms4640 KiB
18Elfogadva3ms4656 KiB
subtask629/29
19Elfogadva54ms7644 KiB
20Elfogadva50ms7764 KiB
21Elfogadva28ms7756 KiB
22Elfogadva26ms7632 KiB
subtask70/30
23Futási hiba234ms522576 KiB
24Futási hiba233ms522576 KiB
25Futási hiba237ms522344 KiB
26Futási hiba190ms522116 KiB
27Futási hiba188ms521884 KiB
28Futási hiba236ms521884 KiB
29Futási hiba237ms521876 KiB
30Futási hiba186ms521876 KiB
31Futási hiba231ms521884 KiB
32Futási hiba182ms521872 KiB
33Futási hiba181ms521684 KiB
34Futási hiba226ms521684 KiB
35Futási hiba180ms521688 KiB
36Futási hiba172ms521684 KiB
37Futási hiba219ms521692 KiB
38Futási hiba223ms521688 KiB
39Futási hiba172ms521684 KiB
40Futási hiba230ms521680 KiB