BL10. 脸滚键盘
描述
av394281 中,充满威严的蕾米莉亚大小姐因为触犯某条禁忌,被隙间妖怪八云紫(紫m……èi)按住头在键盘上滚动。
同样在弹幕里乱刷梗被紫姐姐做成罪袋的你被指派找到大小姐脸滚键盘打出的一行字中的第 `k` 个仅出现一次的字。
(为简化问题,大小姐没有滚出 ascii 字符集以外的字)
输入描述
每个输入都有若干行,每行的第一个数字为`k`,表示求第`k`个仅出现一次的字。然后间隔一个半角空格,之后直到行尾的所有字符表示大小姐滚出的字符串`S`。输出描述
输出的每一行对应输入的每一行的答案,如果无解,输出字符串`Myon~`示例1
输入:
2 misakamikotodaisuki 3 !bakabaka~ bakabaka~ 1~2~9! 3 3.1415926535897932384626433832795028841971693993751o582097494459211451488946419191919l91919hmmhmmahhhhhhhhhh 7 www.bilibili.com/av170001 1 111
输出:
[d] [9] [l] [7] Myon~
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-11-27
#include "string.h" #include <stdio.h> void func(char *a) { int num; sscanf(a,"%d",&num); int an[130]={0}; int len=strlen(a),i,j,k=0,z=0,p; char b[130]={0}; for (i=0;i<len;i++) { if (a[i]==' ') { p=i+1; break; } } for (i=p;i<len;i++) { an[a[i]]++; } for (i=0;i<130;i++) { if (an[i]==1) { b[k++]=i; } } b[k]='\0'; for (i=p;i<len;i++) { for (j=0;j<k;j++) { if (a[i]==b[j]) { z++; if (z==num) { printf("[%c]\r\n",a[i]); return; } } } } printf("Myon~\r\n"); return; } int main () { char str[100000]; while(gets(str)!=NULL) { func(str); } }
C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-05-20
#include<stdio.h> #define LEN 100000 int main() { int k; char str[LEN]; while(~scanf("%d",&k)){ getchar(); gets(str); int a[127] = {0}; for(int i = 0;str[i] != '\0';++i){ a[str[i]]++; } int cnt = 0; int find = 0; for(int i = 0;str[i] != '\0';++i){ if(a[str[i]] == 1){ cnt++; if(cnt == k){ find = 1; printf("[%c]\n",str[i]); } a[str[i]] = 0; } } if(!find){ printf("Myon~\n"); } } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2019-10-05
#include<stdio.h> #define LEN 100000 int main() { int k; char str[LEN]; while(~scanf("%d",&k)){ getchar(); gets(str); int a[127] = {0}; for(int i = 0;str[i] != '\0';++i){ a[str[i]]++; } int cnt = 0; int find = 0; for(int i = 0;str[i] != '\0';++i){ if(a[str[i]] == 1){ cnt++; if(cnt == k){ find = 1; printf("[%c]\n",str[i]); } a[str[i]] = 0; } } if(!find){ printf("Myon~\n"); } } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 456KB, 提交时间: 2020-05-03
#include<stdio.h> #define LEN 100000 int main() { int k; char str[LEN]; while(~scanf("%d",&k)){ getchar(); gets(str); int a[127] = {0}; for(int i = 0;str[i] != '\0';++i){ a[str[i]]++; } int cnt = 0; int find = 0; for(int i = 0;str[i] != '\0';++i){ if(a[str[i]] == 1){ cnt++; if(cnt == k){ find = 1; printf("[%c]\n",str[i]); } a[str[i]] = 0; } } if(!find){ printf("Myon~\n"); } } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 488KB, 提交时间: 2020-05-20
#include<stdio.h> #define LEN 100000 int main() { int k; char str[LEN]; while(~scanf("%d",&k)){ getchar(); gets(str); int a[127] = {0}; for(int i = 0;str[i] != '\0';++i){ a[str[i]]++; } int cnt = 0; int find = 0; for(int i = 0;str[i] != '\0';++i){ if(a[str[i]] == 1){ cnt++; if(cnt == k){ find = 1; printf("[%c]\n",str[i]); } a[str[i]] = 0; } } if(!find){ printf("Myon~\n"); } } return 0; }