This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define watch(x) cout<<(#x)<<"="<<(x)<<'\n'
#define mset(d,val) memset(d,val,sizeof(d))
#define setp(x) cout<<fixed<<setprecision(x)
#define forn(i,a,b) for(int i=a;i<b;i++)
#define fore(i,a,b) for(int i=a;i<=b;i++)
#define pb push_back
#define F first
#define S second
#define INF ll(1e18)
#define MOD 998244353
#define pqueue priority_queue
#define fbo find_by_order
#define ook order_of_key
typedef long long ll;
typedef pair<ll,ll> ii;
typedef vector<ll> vi;
typedef vector<ii> vii;
typedef long double ld;
typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> pbds;
#define MAXN 100005
int conv(char c){
if(c=='J') return 0;
if(c=='O') return 1;
return 2;
}
int n,k;
string s;
vi loc[3];
ll ans=INF;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>n>>k;
cin>>s;
forn(i,0,n){
loc[conv(s[i])].pb(i);
}
for(auto p0=loc[0].begin();p0!=loc[0].end();p0++)
{
int d1=*p0;
auto p1=p0+k-1;
if(p1==loc[0].end()) break;
auto p2=upper_bound(loc[1].begin(),loc[1].end(),*p1);
if(p2==loc[1].end()) break;
p2+=k-1;
if(p2==loc[1].end()) break;
auto p3=upper_bound(loc[2].begin(),loc[2].end(),*p2);
if(p3==loc[2].end()) break;
p3+=k-1;
if(p3==loc[2].end()) break;
ans=min(ans, *p3-d1+1-3*k);
}
if(ans==INF) cout<<-1<<'\n';
else cout<<ans<<'\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |