문제
https://www.acmicpc.net/problem/3078
풀이
이걸 큐로 풀 수 있다는 걸 알고 상상이 1도 안 되서 검색해서 봤다.
(이제 내껄로 만들면 아무튼 성장한거임ㅇㅈㅇㅈ 피타고라스도 학교 다니고 교과서 보고 풀이도 봄;)
너무 똑똑함.. 어떻게 이런 생각을 했지.. 이제 이 지식은 제껍니다.
주의할 점은 output의 타입을 long long으로 지정해야 한다.
소스
#include <iostream>
#include <string>
#include <queue>
int main()
{
int N = 0, K =0;
long long result = 0;
std::queue<int> students[21];
std::string name;
std::cin >> N >> K;
for(int i=0; i<N; ++i)
{
std::cin >> name;
while(!students[name.length()].empty()
&& i - students[name.length()].front() > K)
{
students[name.length()].pop();
}
result+=students[name.length()].size();
students[name.length()].push(i); // ex) students[2] = 3 // 글자수가 2인 3등을 표현
}
std::cout << result;
return 0;
}