AOJ 0242 Input Candidates
問題
解法
入力ができれば楽。fgetsを使ったりgetlineを使ったり。webへアクセスできない状況で出されたら、死ぬ。文字列処理。
心臓に悪いコード
int n; char k, s[2048]; bool cmp(const pair<string, int> &a, const pair<string, int> &b){ if(a.S != b.S) return a.S > b.S; return a.F < b.F; } int main(){ while(scanf("%d", &n) && n){ vector<pair<string, int> >c; scanf("\n"); rep(i, n){ fgets(s, sizeof(s), stdin); s[strlen(s)-1] = '\0'; char *tp; tp = strtok(s, " "); int p; string ss = string(tp); for(p = 0; p < c.size(); p++) if(c[p].F == ss){ c[p].S++; break;} if(p == c.size()) c.PB(MP(ss, 1)); while(tp != NULL){ tp = strtok(NULL, " "); if(tp == NULL) continue; ss = string(tp); for(p = 0; p < c.size(); p++) if(c[p].F == ss){ c[p].S++; break;} if(p == c.size()) c.PB(MP(ss, 1)); } } scanf("%s", s); k = s[0]; rep(i, c.size()) if(c[i].F[0] != k){ c.erase(c.begin()+i); i--;} sort(c.begin(), c.end(), cmp); if(c.size()) rep(i, 5<c.size()?5:c.size()) cout << (i?" ":"") << c[i].F; else printf("NA"); puts(""); } return 0; }