読者です 読者をやめる 読者になる 読者になる

AOJ 0242 Input Candidates

AOJ C/C++

問題

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;
}