2021年天梯赛选拔赛第一场
思路:
查找子串,学习一个在找子串反面很方便好用的函数叫find,用处就是看这个子串在字符串中有没有,如果没有就返回 -1。
#include <iostream> #include <cstring> #include <string> #include <algorithm> using namespace std; int main() { string s; int n = 0 , cnt = 0 , flag = 0 , start = 0; while(1) { getline(cin,s); if(s == ".") break; n ++; if(s.find("chi1 huo3 guo1") != -1) { if(flag == 0) { start = n; flag = 1; } cnt++; } } cout << n << endl; if(i) cout << start << " " << i << endl; else cout << "-_-#"; return 0; }
模拟
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <algorithm> 6 #include <cmath> 7 #include <map> 8 #include <stack> 9 10 using namespace std; 11 12 const int N = 10010; 13 14 int d, p; 15 int t, s; 16 int anscnt; 17 18 map<string, int> mp; 19 map<string, int> vis; 20 21 struct Node 22 { 23 string name; 24 string id; 25 int flag; 26 int hh, mm; 27 int t; 28 int idx; 29 } a[N], ans[N]; 30 31 bool cmp(Node x, Node y) 32 { 33 if (x.t != y.t) 34 return x.t < y.t; 35 36 return x.idx < y.idx; 37 } 38 39 bool check(string s) 40 { 41 int len = s.length(); 42 if (len != 18) return false; 43 44 for (int i = 0; i < len; ++i) 45 if (!isdigit(s[i])) 46 return false; 47 48 return true; 49 } 50 51 int main() 52 { 53 cin >> d >> p; 54 for (int i = 1; i <= d; i++) 55 { 56 cin >> t >> s; 57 for (int j = 1; j <= t; j++) 58 { 59 cin >> a[j].name >> a[j].id; 60 scanf("%d%d:%d", &a[j].flag, &a[j].hh, &a[j].mm); 61 62 a[j].t = a[j].hh * 60 + a[j].mm; 63 a[j].idx = j; 64 65 if (mp.find(a[j].id) == mp.end()) 66 mp[a[j].id] = 0; 67 68 if (a[j].flag == 1 && check(a[j].id) && vis.find(a[j].id) == vis.end()) 69 { 70 vis[a[j].id] = 0; 71 ans[anscnt++] = a[j]; 72 } 73 } 74 sort(a + 1, a + t + 1, cmp); 75 76 int cnt = 0; 77 for (int j = 1; j <= t && cnt < s; j++) 78 { 79 if (check(a[j].id) && (!mp[a[j].id] || (i - mp[a[j].id]) > p)) 80 { 81 cout << a[j].name << ' ' << a[j].id << endl; 82 cnt++; 83 mp[a[j].id] = i; 84 } 85 } 86 } 87 for (int i = 0; i < anscnt; ++i) 88 cout << ans[i].name << ' ' << ans[i].id << endl; 89 90 return 0; 91 }
团体程序设计天梯赛-练习集
公告

以上图片来自微信朋友圈:这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”,那就厉害了,我们的故事就开始了。
本题要求你实现一个程序,自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。
输入格式:
输入每行给出一句不超过 80 个字符的、以回车结尾的朋友信息,信息为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。当读到某一行只有一个英文句点 . 时,输入结束,此行不算在朋友信息里。
输出格式:
首先在一行中输出朋友信息的总条数。然后对朋友的每一行信息,检查其中是否包含 chi1 huo3 guo1,并且统计这样厉害的信息有多少条。在第二行中首先输出第一次出现 chi1 huo3 guo1 的信息是第几条(从 1 开始计数),然后输出这类信息的总条数,其间以一个空格分隔。题目保证输出的所有数字不超过 100。
如果朋友从头到尾都没提 chi1 huo3 guo1 这个关键词,则在第二行输出一个表情 -_-#。
输入样例 1:
Hello!
are you there?
wantta chi1 huo3 guo1?
that's so li hai le
our story begins from chi1 huo3 guo1 le
.
输出样例 1:
5
3 2
输入样例 2:
Hello!
are you there?
wantta qi huo3 guo1 chi1huo3guo1?
that's so li hai le
our story begins from ci1 huo4 guo2 le
.
输出样例 2:
5
-_-#
作者
陈越
单位
浙江大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

浙公网安备 33010602011771号