题目描述

av394281 中,充满威严的蕾米莉亚大小姐因为触犯某条禁忌,被隙间妖怪八云紫(紫m……èi)按住头在键盘上滚动。
同样在弹幕里乱刷梗被紫姐姐做成罪袋的你被指派找到大小姐脸滚键盘打出的一行字中的第 `k` 个仅出现一次的字。
(
为简化问题,大小姐没有滚出 ascii 字符集以外的字)

输入描述:

每个输入都有若干行,每行的第一个数字为`k`,表示求第`k`个仅出现一次的字。然后间隔一个半角空格,之后直到行尾的所有字符表示大小姐滚出的字符串`S`。

输出描述:

输出的每一行对应输入的每一行的答案,如果无解,输出字符串`Myon~`

(请不要输出多余的空行)

为了方便评测,如果答案存在且为c,请输出[c]
示例1

输入

2 misakamikotodaisuki
3 !bakabaka~ bakabaka~ 1~2~9!
3 3.1415926535897932384626433832795028841971693993751o582097494459211451488946419191919l91919hmmhmmahhhhhhhhhh
7 www.bilibili.com/av170001
1 111

输出

[d]
[9]
[l]
[7]
Myon~

备注:

字符串S仅包含可见ascii码,长度不超过100000

注意cin、scanf用于判断输入的方法,以及getline(),有一个用例的结果不知道怎么回事完全不一样,明天再康!

#include<iostream>
#include<map>
using namespace std;
int main(){
    int k;
    while(~scanf("%d ",&k)){
        map<char,int> dic;
        string str;
        int count = 1;
        int flag = 0;
        getline(cin,str);
        for (int i = 0 ; i < str.length() ; i ++ ) dic[str[i]]++;
        for (int i = 0 ; i < str.length() ; i ++ ){
            if( dic[str[i]] == 1 && count != k ) count++;
            else if( dic[str[i]] == 1 && count == k ) {
                printf("[%c]\n",str[i]);
                flag = 1;
                break;
            }
        }
        if(!flag) printf("Myon~\n");
    }
}

定位问题是~scanf("%d ",&k)出的’ ‘,改成scanf+getchar就解决了..似乎是因为那个用例读取的方法不一样。附scanf的返回值:

  • 返回值代表的是正确匹配的参数个数
  • 如果只读到一个EOF,则返回值为EOF

两种用法:

while(scanf("%d", &a)==EOF)break;

while(~scanf("%d", &a))


0 条评论

发表评论

Avatar placeholder