av394281 中,充满威严的蕾米莉亚大小姐因为触犯某条禁忌,被隙间妖怪八云紫(紫m……èi)按住头在键盘上滚动。
同样在弹幕里乱刷梗被紫姐姐做成罪袋的你被指派找到大小姐脸滚键盘打出的一行字中的第 `k` 个仅出现一次的字。
(为简化问题,大小姐没有滚出 ascii 字符集以外的字)
av394281 中,充满威严的蕾米莉亚大小姐因为触犯某条禁忌,被隙间妖怪八云紫(紫m……èi)按住头在键盘上滚动。
同样在弹幕里乱刷梗被紫姐姐做成罪袋的你被指派找到大小姐脸滚键盘打出的一行字中的第 `k` 个仅出现一次的字。
(为简化问题,大小姐没有滚出 ascii 字符集以外的字)
每个输入都有若干行,每行的第一个数字为`k`,表示求第`k`个仅出现一次的字。然后间隔一个半角空格,之后直到行尾的所有字符表示大小姐滚出的字符串`S`。
输出的每一行对应输入的每一行的答案,如果无解,输出字符串`Myon~`
(请不要输出多余的空行)
为了方便评测,如果答案存在且为c,请输出[c]
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
334 ms | 4484K | Python 3 |
try: while 1: s = input().strip().split(' ',1) n,l,o,r,f = int(s[0]),s[1],[],[],1 for i in l: if i not in r and l.count(i)==1: o.append(i) if len(o)==n: print('['+i+']') f = 0 break else: r.append(i) if f: print("Myon~") except: pass
while(line = readline()){ var e = 0; for(i=0;i<line.length;i++){ if(line[i]==" "){ e = i; break; } } if(e==1){ var k = parseInt(line[0]); }else{ var k = parseInt(line[0])*10+parseInt(line[1]);; } var t = []; for(i=e+1;i<line.length;i++){ t.push(line[i]); } var temp = []; var count= [] ; for(i=0;i<t.length;i++){ if(temp.indexOf(t[i])==-1){ var l =0; temp.push(t[i]); count.push(l++); }else{ var index = temp.indexOf(t[i]); count[index]++; } } var w = []; for(i=0;i<count.length;i++){ count[i]+1; if(count[i]==0){ w.push(temp[i]); } } var pp = 'Myon~'; if(w.length>=k){ console.log('['+w[k-1]+']'); }else{ console.log(pp); } }
import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str; while ((str = br.readLine()) != null) { String num = str.split(" ")[0]; int k = Integer.parseInt(num); String s = str.substring(num.length() + 1); System.out.println(appearFirstK(k, s)); } } private static String appearFirstK(int k, String s) { char[] chars = s.toCharArray(); int[] hash = new int[200]; for (char c : chars) { hash[c]++; } for (char c : chars) { if (hash[c] == 1 && k == 1) { return "[" + c + "]"; } else if (hash[c] == 1) { k--; } } return "Myon~"; } }
#include<bits/stdc++.h> using namespace std; int main(){ int n; string s0; string res; int cnt; unordered_map<char, int> m; while(getline(cin, s0)){ // 处理输入 int i = 0; while (s0[i] != ' '){ i++; } string sn = s0.substr(0, i); n = stoi(sn); string s = s0.substr(i+1,s0.length()); // 初始化 res = ""; m.clear(); cnt = 0; // 核心代码 for(int i = 0; i < s.length(); i++){ m[s[i]]++; } for(int i = 0; i < s.length(); i++){ if(m[s[i]] == 1){ cnt++; if(cnt == n){ res = s[i]; break; } } } // 输出 if(res == ""){ cout << "Myon~" << endl; }else{ cout << "[" << res << "]" << endl; } } return 0; }
#include <iostream> #include <string.h> #include <stdlib.h> #include<string> using namespace std; string str; int n[128]; int main() { while(getline(cin,str)) { memset(n,0,sizeof(n)); int z=0; while(str[z]!=' ') { z++; } string s0=str.substr(0,z); string s1=str.substr(z+1,str.length()); int k=stoi(s0); for(int i=0;i<s1.length();i++) { n[s1[i]]++; } int h=0; int flag=0; for(int i=0;i<s1.length();i++) { if(n[s1[i]]==1) { h++; if(h==k) { cout<<'['<<s1[i]<<']'<<endl; break; } } flag++; } if(flag==s1.length()) {cout<<"Myon~"<<endl;} str=""; } }
package main import ( "bufio" "fmt" "io" "os" "strconv" "strings" ) func findString(a int,s string) string{ length := len(s) res := "" saveString := make(map[string]bool) for k:=0; k<length; k++{ saveString[string(s[k])] = true for i := 0 ;i < length ;i++{ if k!=i && s[k] == s[i]{ saveString[string(s[k])] = false break } } if saveString[string(s[k])] == true{ res = res + string(s[k]) } } l2 := len(res) if a > l2{ return "Myon~" }else{ b := "["+string(res[a-1])+"]" return b } } func main(){ reader := bufio.NewReader(os.Stdin) for { text, err := reader.ReadString('\n') text = strings.TrimSpace(text) if err == io.EOF{ break } s1 := strings.SplitN(text," ",2) if len(s1)<2{ continue } target,_ := strconv.Atoi(s1[0]) s := s1[1] a := findString(target,s) fmt.Println(a) } }
#include<iostream> using namespace std; #include<cstring> int main(){ int cntx[129]; bool v[129]; string st; int k; bool flag; char ans; while(cin>>k){ cin.ignore(); int cnt=0; flag=0; memset(cntx,0,sizeof(cntx)); memset(v,0,sizeof(v)); getline(cin,st); for(int i=0;i<st.length();i++){ cntx[st[i]]++; } for(int i=0;i<st.length();i++){ if(v[st[i]]==0&&cntx[st[i]]==1){ v[st[i]]=1; ans=st[i]; cnt++; } if(cnt==k){ flag=1; cout<<"["<<ans<<"]"<<endl; break; } } if(flag==0) cout<<"Myon~\n"; } }
#include <iostream> #include <string> #include <sstream> #include <map> #define INIT() ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); using namespace std; int main() { INIT(); string line; while(getline(cin,line)) { stringstream istr(line); int k = 0; string str; istr >> k; // 读取空格 istr.get(); // 读个到行行尾的所有字符,切忌使用cin,cin遇到空格符结束, // 导致无法读到行尾 getline(istr, str); int counter[256] = {0}; for(int i = 0; i < str.size(); i++) counter[str[i]]++; int j = 0; for(int i = 0; i < str.size(); i++) { if(counter[str[i]] == 1) { j++; if(j == k) { cout << "[" << str[i] << "]" << endl; break; } } } if(j != k) cout << "Myon~" << endl; } return 0; }
## r8i ## ,Br;; iaiXW ## WXr7X2aZr0r ## ;ZSX2ii7X;; ## ;XXiZWXaZ:;Zr ## S0ZX. ;aZS ## ,S27rX:,0X.S2: ## iXX:,X8M080@07;X7i ## .BZ8; rMW0Xr7BZ8BZ;: ## S2r:;ar:aXSZX2, S,;ri. ## 72;Br W0r7a8Sa;SZ:r.i. ## ,i0a@W0Z80XS7ZMWr,M.r ## i2S B0BMMMaZ; S.: ## :2 .8a08888;; . ## :i7X :X; SW020Wi ;; , ## Z0aS:XX:r WWBZWWW .: ; ## 78Sr2i,X. MB@8MWB7.: 2:. ## Sr7BZS7 S@200@W0;.;80B;,i ## S2SaarM8aa2aZ82;B2,87 ## .X;i7Xr rM@MWW8XX0XS7 ## ,Z. ,72 @BM0@BM0;ZS r. ## a8. .Xa WW@B0@Z8MaX8; 2 , 7. ## iS:XS, XMZXWWBZZ0W;8S, 2 iZM. ## BM20 MW2;ZW@Z2@87B2XS8022: ## ,7iZaSWMWBSZ2MW0MM0WWZ, ;Z ## :Xi22 .aa0W@WWMWZ2XaWBi SBi ## i.. 8X X7ir; , ,2ZSS ,: ## ;a. .r@2, .0M7 .:i ## M@ @Mi ## MMi ,MBX ## WMM 8MM ## ## 紫 妹 保 佑 , 代 码 无 BUG try: while True: s = input().strip().split(' ',1) # 输入 n = int(s[0]) hashTable = [] # 将字符串中存在的字符存进哈希表 _hashTable = {} # 用于计算每个字符重复次数的哈希数组 kind_of_char = 0 # 字符串中一共有多少种字符 for i in s[1]: if i not in hashTable: # 每个字符只存一个进去,如果字符串中不止一个该字符,不存入 hashTable.append(i) _hashTable[kind_of_char] = 1 # 挨个存入,与哈希表一一对应,初始值为'1' kind_of_char += 1 else: pos = hashTable.index(i) # 定位重复值在哈希表中的位置,并使与之对应的重复次数+1 _hashTable[pos] += 1 order = [] # 把只出现过一次的字符合并为新的列表 target = 0 # 共有多少只出现过一次的字符 for k in range(kind_of_char): if(_hashTable[k] == 1): order.append(hashTable[k]) target += 1 if(target == 0): # 如果根本没有只出现过一次的字符,直接给flag赋0 flag = 0 for j in range(target): if(j == (n-1)): # 如果输入的n在只出现过一次的字符的数量之内,说明可以找到指定的值,即答 print('['+str(order[j])+']') flag = 1 break else: # 在限定范围以外,比如5 abcd,最末只出现过一次的字符为d,位置为4,不存在位置为5的符合条件的值,flag赋0 flag = 0 if(flag == 0): print("Myon~") # MyonMyonMyon! except: pass
#include <algorithm> #include <iostream> #include <list> #include <map> #include <string> using namespace std; int main() { int x; string s; while (cin >> x) { int count = 0; map<char, int> dic; list<char> ch; getchar(); getline(cin, s); // cout << x << " xxxx: " << s << endl; for (auto it = s.begin(); it != s.end(); it++) { ch.push_back(*it); dic[*it] += 1; } ch.unique();//去掉重复元素 for (auto it = ch.begin(); it != ch.end(); it++) { if (dic[*it] == 1) { count++; } if (count == x) { cout << "[" << *it << "]" << endl; break; } } if (count != x) { cout << "Myon~" << endl; } } return 0; }用list来记录字符顺序,用map来记录字符出现的次数,应该算是好理解的解法了,已AC。
import java.util.LinkedHashMap; import java.util.Map; import java.util.Scanner; import java.util.Set; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); while (input.hasNext()) { int k = input.nextInt(); String s = input.nextLine(); Map<String, Integer> old = new LinkedHashMap<>(); // 出现过的字 for (int i = 0; i < s.length(); i++) { if (!old.containsKey(s.substring(i, i + 1))) { old.put(s.substring(i, i + 1), 0); } } Set<String> keys = old.keySet(); for (String str : keys) { for (int i = 0; i < s.length(); i++) { if (str.equals(s.substring(i, i + 1))) { int value = old.get(str); value++; old.put(str, value); } } } int count = 0; for(String str:keys) { if(old.get(str)==1&&!str.equalsIgnoreCase(" ")) { count++; } if(count==k) { System.out.println("["+str+"]"); break; } } if(count<k||k<=0) System.out.println("Myon~"); } } }通过率为73%…………求解!
import sys class Solution(): def kthNumber(self): # 读入数据 while True: try: tmp = [] # n, k = list(map(int, input().split())) line = sys.stdin.readline().strip() # print('line',line) if line == '': break else: tmp.append(line) # print(tmp) hashTable = {} # 创建一个哈希表用来将字符映射为一个数字 #对tmp中的每一个字符串进行处理 for i in range(len(tmp)): string = tmp[i] for i in range(len(string)): if string[i] == ' ': break k = int(string[0:i]) char = string[i + 1:] # print('k',k) # print('char',char) if char == None or len(char) <= 0: return -1 #对字符串进行计数 for i in char: if i in hashTable: hashTable[i] += 1 else: hashTable[i] = 1 # print('hash',hashTable) # 在哈希表中寻找alist中出现第k个仅出现一次的字符 count = 0 #用来计数仅出现一次的字符的个数 for index, i in enumerate(char): # print(index) if hashTable[i] == 1: count += 1 if count == k: print('[' + i + ']') if count < k: print("Myon~") except: break if __name__ == '__main__': Solution().kthNumber()