[HIHO1385]A Simple Job(模拟)
题目链接:http://hihocoder.com/problemset/problem/1385
题意:给出几段话,问哪个连续两个由空格隔开的单词对出现最多。
模拟啊模拟,只会写模拟。
1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstring> 5 #include <climits> 6 #include <complex> 7 #include <fstream> 8 #include <cassert> 9 #include <cstdio> 10 #include <bitset> 11 #include <vector> 12 #include <deque> 13 #include <queue> 14 #include <stack> 15 #include <ctime> 16 #include <set> 17 #include <map> 18 #include <cmath> 19 using namespace std; 20 #define fr first 21 #define sc second 22 #define cl clear 23 #define BUG puts("here!!!") 24 #define W(a) while(a--) 25 #define pb(a) push_back(a) 26 #define Rint(a) scanf("%d", &a) 27 #define Rll(a) scanf("%I64d", &a) 28 #define Rs(a) scanf("%s", a) 29 #define Cin(a) cin >> a 30 #define FRead() freopen("in", "r", stdin) 31 #define FWrite() freopen("out", "w", stdout) 32 #define Rep(i, len) for(int i = 0; i < (len); i++) 33 #define For(i, a, len) for(int i = (a); i < (len); i++) 34 #define Cls(a) memset((a), 0, sizeof(a)) 35 #define Clr(a, x) memset((a), (x), sizeof(a)) 36 #define Full(a) memset((a), 0x7f7f7f, sizeof(a)) 37 #define lrt rt << 1 38 #define rrt rt << 1 | 1 39 #define pi 3.14159265359 40 #define RT return 41 #define lowbit(x) x & (-x) 42 #define onecnt(x) __builtin_popcount(x) 43 typedef long long LL; 44 typedef long double LD; 45 typedef unsigned long long ULL; 46 typedef pair<int, int> pii; 47 typedef pair<string, int> psi; 48 typedef pair<LL, LL> pll; 49 typedef map<string, int> msi; 50 typedef vector<int> vi; 51 typedef vector<LL> vl; 52 typedef vector<vl> vvl; 53 typedef vector<bool> vb; 54 55 const int maxn = 550; 56 typedef struct Node { 57 string s; 58 bool end; 59 Node() {} 60 Node(string ss, bool e) : s(ss), end(e) {} 61 }Node; 62 63 vector<Node> words; 64 map<pair<string, string>, int> ret; 65 char tmp[maxn]; 66 char qq[maxn]; 67 68 void gao() { 69 int pre = 0, pos = 0; 70 bool flag = 0; 71 while(tmp[pos]) { 72 if(tmp[pos] == ' ') { 73 pos++; 74 continue; 75 } 76 if(tmp[pos] == ',' || tmp[pos] == '.') { 77 words[words.size()-1].end = 1; 78 pos++; 79 continue; 80 } 81 pre = pos; 82 while(tmp[pos] != ' ' && tmp[pos] != ',' && tmp[pos] != '.' && tmp[pos]) pos++; 83 Cls(qq); 84 for(int i = pre; i < pos; i++) { 85 qq[i-pre] = tmp[i]; 86 } 87 words.push_back(Node(qq, 0)); 88 } 89 } 90 91 signed main() { 92 // FRead(); 93 int _ = 1; 94 while(gets(tmp)) { 95 ret.clear(); 96 words.clear(); 97 gao(); 98 words[words.size()-1].end = 1; 99 while(gets(tmp) && strcmp(tmp, "####") != 0) { 100 gao(); 101 words[words.size()-1].end = 1; 102 } 103 Rep(i, words.size()-1) { 104 if(words[i].end) continue; 105 ret[make_pair(words[i].s, words[i+1].s)]++; 106 } 107 map<pair<string, string>, int>::iterator it; 108 pair<string, string> wtf; 109 int tmp = 0; 110 for(it = ret.begin(); it != ret.end(); it++) { 111 if(tmp < it->second) { 112 tmp = it->second; 113 wtf = it->first; 114 } 115 } 116 cout << wtf.first << " " <<wtf.second <<":" << tmp << endl; 117 } 118 RT 0; 119 }