# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1138100 | secretwood01 | 새로운 문제 (POI13_usu) | Java | 0 ms | 0 KiB |
import java.util.*;
import java.io.*;
public class Takeout {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(System.out);
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
char [] a = st.nextToken().toCharArray();
TreeMap<Integer, Ans> ans = new TreeMap<>();
TreeSet<Integer> used = new TreeSet<>();
for (int i=0;i<N;i++) {
if (a[i]=='c') {
ans.put(i, new Ans(i));
}
}
for (int x : ans.keySet()) {
if (x==ans.firstKey()) ans.get(x).prev = -1;
else ans.get(x).prev = ans.lowerKey(x);
}
int currclosest = ans.firstKey();
for (int i=0;i<N;i++) {
if (a[i]=='c') {
currclosest = i;
continue;
}
int ogc = currclosest;
while (ans.get(currclosest).set.size()>=k+1) {
used.add(currclosest);
currclosest = ans.get(currclosest).prev;
if (currclosest==-1) currclosest = ans.higherKey(used.last());
}
ans.get(currclosest).set.add(i);
}
Ans [] print = new Ans[ans.size()];
int ind = 0;
for (int x : ans.keySet()) {
print[ind] = ans.get(x);
ind++;
}
Arrays.sort(print);
for (Ans x : print) {
pw.println(x.toString());
}
pw.close();
br.close();
}
}
class Ans implements Comparable<Ans> {
TreeSet<Integer> set;
int dif;
int prev;
public Ans(int i) {
set = new TreeSet<>();
set.add(i);
}
public void calcDif() {
dif = set.last()-set.first();
}
public int compareTo(Ans a) {
this.calcDif();
a.calcDif();
return Integer.compare(a.dif, dif);
}
public String toString() {
TreeSet<Integer> dup = (TreeSet<Integer>)set.clone();
String S = "";
while (dup.size()>1) {
S+=(dup.pollFirst()+1)+" ";
}
S+=(dup.pollFirst()+1);
return S;
}
}