#include<cstdio>
#include<set>
#include<string>
using namespace std;
set<string> sq;
int main()
{
int m, n, s;
char str[25];
scanf("%d %d %d", &m, &n, &s);
int i = 1,num=0;
bool flag = 0;
for(int i=1;i<=m;i++)
{
scanf("%s", str);
if (i == s)
{
if (sq.find(str) == sq.end())
{
printf("%s\n", str);
num++;
//printf("%d\n", i);
sq.insert(str);
}
}
if (flag == 1)
{
if (sq.find(str) != sq.end()) continue;
else
{
printf("%s\n", str);
num++;
//printf("%d\n", i);
sq.insert(str);
flag = 0;
s = i;
continue;
}
}
if ((i - s) % n == 0&&(i-s)>0)
{
if (sq.find(str) == sq.end())
{
printf("%s\n", str);
num++;
//printf("%d\n", i);
sq.insert(str);
}
else
{
flag = 1;
}
}
}
if (num == 0) printf("Keep going...\n");
return 0;
}
https://blog.youkuaiyun.com/liuchuo/article/details/60467398
这里map默认初始值都是0,思路非常值得学习。
#include <iostream>
#include <map>
using namespace std;
int main() {
int m, n, s;
scanf("%d%d%d", &m, &n, &s);
string str;
map<string, int> mapp;
bool flag = false;
for (int i = 1; i <= m; i++) {
cin >> str;
if (mapp[str] == 1) s = s + 1;
if (i == s && mapp[str] == 0) {
mapp[str] = 1;
cout << str << endl;
flag = true;
s = s + n;
}
}
if (flag == false) cout << "Keep going...";
return 0;
}