E - Yutori
制限時間:2秒/メモリ制限:1024メガバイト
問題文
高橋の作品に決定しましたK のKからの彼の選択の日数N Nの明日から始まる日。
あなたが整数与えられ、C C及び文字列S S。次のように高橋は彼の就業日を選択します:
- その日のために働いた後、彼は、その後の作業を控えるC Cの日。
- 場合は、私、私の目の文字S Sであり
x
、彼は日に動作しません私は私の日、1 1は明日で、デイ2 2は明後日、などとします。
高橋は仕事にバインドされているすべての日を検索します。
制約
- 1 ≤ N ≤ 2 × 10 5 1≤N≤2×105
- 1 ≤ K ≤ N 1≤K≤N
- 0 ≤ C ≤ N 0≤C≤N
- 長さS SであるN 、N。
- 各文字S Sはあります
o
かx
。 - 問題文での条件が満たされるように、高橋は彼の平日を選択することができます。
入力
入力は、次の形式で標準入力から与えられます。
nkcs
出力
高橋は昇順、1行に1つずつでの作業にバインドされているすべての日を印刷します。
サンプル入力1 コピー
コピー
11 3 2 ooxxxoxxxoo
サンプル出力1 コピー
コピー
6
高橋は、上で動作するように起こっている3 3のうちの日11 11日。その日のために働いた後、彼は、その後の作業を控える2 2日。
デイ:彼の平日のための4つの可能な選択肢があります1 、6 、10 1,6,10、デイ1 、6 、11 1,6,11、デイ2 、6 、10 2,6,10、及びデイ2 、図6は、、11 2,6,11。
このように、彼は日に仕事にバインドされている6 6。
サンプル入力2 のコピー
コピー
5 2 3 ooxoo
サンプル出力2 のコピー
コピー
1 5
デイ:彼の平日のための唯一の可能な選択肢があります1 、5 1,5。
サンプル入力3 コピー
コピー
5 1 0 oooooが
サンプル出力3 コピー
コピー
彼は仕事にバインドされている何の日が存在しない場合があります。
サンプル入力4 コピー
コピー
16 4 3 ooxxoxoxxxoxoxxo
サンプル出力4 コピー
コピー
11 16
他の人の交流の記録
#include <ビット/ STDC ++ H>
名前空間STDを使用して、
#defineは長い長いINTっ
の#define ULのunsigned long int型
の#define LD長い二重
(; I <T I ++ iが0 = LL)のための#define F(T)
の#define VIベクトル<整数>
の#define VLベクター<LL>
#define PRI対<整数、整数>
の#define MPIマッピング<整数、整数>
の#define PRL対<-1,11,11->
の#define MP make_pair
の#define MPLマップ<-1,11,11->
の#define umpl unordered_map <-1,11,11->
#定義PB一back
の#define FF最初
の#define SS第二
の#define MOD十億七
の#define INF 2E18
の#define EPS 1E-3
の#define PI 3.1415926535897932385
CONSTダブルH = 1E-6。
const int型MAX_ = 100005;
#defineの表示(V)、F(v.size())COUT << V [I] << ""
の#defineすべて(V)v.begin()、v.end()
インラインLL MUL(LL A、LL B){リターン(* 1LL * B)%MOD。}
インラインLLサブ(-1,11,11- B){LL C = A - B。IF(C <0)C + = MOD。Cを返します。}
追加ちゃうインライン(-1,11,11- b)は{LL C = A + B。(C> MOD)Cあれば- = MOD。Cを返します。}
////////////////////// ********* CODE *********** ////// ///////////////
/////////////////////////////////// ///////////////////////////////
INTメイン()
{
ios_base :: sync_with_stdio(偽)。
cin.tie(NULL)。
cout.tie(NULL)。
INT、N、K、C。CIN >> N >> K >> C。
文字列str; cinを>> STR。
INTプレ[n]は、SUF [N]。何これより前// i番目の日はありません。
memsetの(前、0、はsizeof(PRE))。
memset(SUF、0、はsizeof(SUF))。
int型の仕事= 1;
(; I <N I ++ INT I = 0)するための
{
IF(STR [I] == 'O')
{
事前[I] =仕事++。
I + = C;
(仕事> k)のブレークであれば、
}
}
work--。
(; I> = 0; int型I = N-1 i--)用
{
IF(STR [I] == 'O')
{
SUF [I] = work--。
I- = C。
(作業<= 0)ブレークであれば、
}
}
のために(INT I 0 =;私は<N; iが++)
{
場合(![I] == SUF [i]は[I] = 0を事前&& PRE)
{
COUT << I + 1 << "\ n"は;
0を返します。
}