質問B:JJOOII 2 --------------------------------思考

Bit目描述Bitaro
は誕生日プレゼントとして長さNの文字列Sを受け取りました。文字列Sは、J、O、Iの3種類の文字で構成されます。
正の整数Kごとに、K、J、K O、KIの順に構成される文字列を、レベルKのJOI文字列と呼びます。たとえば、JJOOIIはレベル2のJOI文字列です。Bitaroは
レベルKのJOI文字列が好きなので、次の3つの操作を任意の回数何度でも使用して、文字列SからレベルKのJOI文字列を作成します。 order:
Operation 1 BitaroはSの最初の文字を削除します。
操作2 BitaroはSの最後の文字を削除します。
操作3ビタロは、最初でも最後でもないSの文字を削除します。
Operation 3の使用には時間がかかるため、Bitaroは、できるだけ少ない数のOperation 3でレベルKのJOI文字列を作成したいと考えています。
長さNの文字列Sと正の整数Kを指定して、SからレベルKのJOI文字列を作成するために必要な操作3の最小数を出力するプログラムを記述します。操作でレベルKのJOI文字列を作成できない場合は、代わりに
-1
を出力します输入力標準入力から次のデータを読み取ります。NとKは整数です。Sは文字列です。
NK
S
制約
•3≤N≤200000。
1≤K≤N / 3。
•Sは、J、OおよびIから成る長さNの文字列である
输出
標準出力に1行を書き込みます。出力には、SからレベルKのJOI文字列を作成するために必要な操作3の最小数が含まれている必要があります。レベルKのJOI文字列を作成できない場合は、代わりに-1を出力します。
サンプル入力コピー
[サンプル1]

10 2
OJIJOIOIIJ
[サンプル2]
9 3
JJJOOOIII
[サンプル3]
9 1
IIIOOOJJJ
サンプル出力コピー
[サンプル1]

2
[サンプル2]
0
[サンプル3]
- 1
ヒント
例1の説明

次の操作により、文字列SからレベルKのJOI文字列を作成できます。

  1. 操作1を使用すると、SはJIJOIOIIJになります。
  2. 操作2を使用すると、SがJIJOIOIIになります。
  3. 操作3を使用して2番目の文字を削除すると、SはJJOIOIIになります。
  4. 操作3を使用して4番目の文字を削除すると、SはJJOOIIになります。
    操作3を2回未満使用してレベルKのJOI文字列を作成することは不可能であるため、2を出力する必要があります。

例2では
、操作を使用する必要がないことを説明しています。

例3解释
このサンプルでは、​​文字列Sからレベル1のJOI文字列を作成することはできません。

分析:
メンテナンス3つの配列。
配列が維持される:Iを扱う場合、それは「J」、「O」、Kとの間にジャンプさせるどの位置 「I」、
処理キュー

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+1000;
int n,k;
int a[N];
int nj[N],no[N],ni[N];
char s[N];
void get(int nx[],char c)
{
	queue<int>q;int l=0;
	for(int i=1;i<=n;i++) //预处理i位置跳到哪使得之间有k个 J,O,I;
	{
		if(s[i]==c)
		{
			q.push(i);
			if(q.size()==k)
			{
				for(int j=l+1;j<=q.front();j++) nx[j]=i;
				l=q.front();q.pop();
			}
		}
	}
	for(int i=l+1;i<=n;i++) nx[i]=1e9;
}
int main()
{
	scanf("%d %d",&n,&k);
	scanf("%s",(s+1));
	get(nj,'J');get(no,'O');get(ni,'I');
	int ans=1e9;
	for(int i=1;i<=n;i++)
	{
		int j=nj[i];  if(j>n) continue;
		j=no[j];if(j>n) continue;
		j=ni[j];if(j>n) continue;
		ans=min(ans,j-i+1-3*k);
	}
	if(ans==1e9) cout<<-1<<endl;
	else cout<<ans<<endl;
	
}
公開された元の記事572件 賞賛された14件 ビュー10,000件以上

おすすめ

転載: blog.csdn.net/qq_43690454/article/details/105273630