陌陌的pat乙级题解
题解
数组操作 |
---|
我认为先把数据存起来 处理更方便 |
把名单存到一个vector里 |
t 代表已经间隔的人数,if(t == K) 来判断是不是中奖 |
过滤重复的人利用set,把已经中奖的人放进去,每次t == K |
跑个while, 条件是v[i],i++ 一直在ret中。那么第一个退出的就是中奖的人 |
最后看set是不是空就行,如果有中奖的,一定存到了set里 |
Code
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main()
{
int N, M, K;
cin >> N >> M >> K;
string s;
set<string> ret;
vector<string> v(N + 5);
for (int i = 1; i <= N; i++)
{
cin >> v[i];
}
int i = K;
int t = M;
while (i <= N)
{
if (t == M)
{
t = 0;
while (ret.count(v[i]))
i++;
ret.insert(v[i]);
cout << v[i] << endl;
}
else
i++, ++t;
}
if (ret.size() == 0)
cout << "Keep going...";
return 0;
}