今天在考场上智障了啊。。。其实比较很简单的一道题,不知道为什么在考场写的就乱七八糟的,最后还有一个测试点没过。。。
回家重新写了一下,,就诸葛亮了
好了,废话不多说,上代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 10010;
int m,n,s;
char a[maxn][30];
bool hashT[maxn] = { false };
void bianli(char b[]) { //让hashT来存储:让已经输出过的字符串和组里其他相同字符串的下标失效
for (int i = 0; i <= m - 1; i++) {
if (strcmp(a[i], b) == 0) {
hashT[i] = true ;
}
}
}
int main() {
scanf("%d %d %d", &m, &n, &s);
if (m == 0 || s > m) {
for (int i = 0; i < m; i++) {
scanf("%s", a[i]);
}
printf("Keep going...\n");
return 0;
}
else {
for (int i = 0; i < m; i++) {
scanf("%s", a[i]);
}
printf("%s\n",a[s-1]);
bianli(a[s - 1]);
int yy = 0;
for (int i = s; i <= m - 1; i++) {
if (hashT[i] == false) { //只要检查是否输出过就好了,不需要额外的其他判定
yy++;
if (yy == n) {
printf("%s\n", a[i]);
bianli(a[i]);
yy = 0; //这里一定要记得归零
}
}
}
return 0;
}
}