2011年5月17日火曜日

AOJ 2205

国内予選までは解ける問題を一日2問解くようにしたい。

AOJ 2205。 難易度はB問。
宝くじでいくら当たってるかを解析する。
一枚のくじに対して複数のあたりが存在しないってことなので普通に書いたら終わり。

  1. #include <iostream>  
  2. #include <vector>  
  3. #include <map>  
  4. #include <string>  
  5.   
  6. using namespace std;  
  7.   
  8. vector<pair<string , int> > treasure;  
  9.   
  10. int main(void)  
  11. {  
  12.  while (1) {  
  13.      int n , m;  
  14.      cin >> n >> m;  
  15.      if (n == 0 && m == 0) {  
  16.          break;  
  17.      }  
  18.      treasure.clear();  
  19.      for (int i = 0 ; i < n ; i++) {  
  20.          pair<string , int> temp;  
  21.          cin >> temp.first >> temp.second;  
  22.          treasure.push_back(temp);  
  23.      }  
  24.    
  25.      int result = 0;  
  26.      string have;  
  27.      for (int i = 0 ; i < m ; i++) {  
  28.          cin >> have;  
  29.          for (int j = 0 ; j < n ; j++) {  
  30.              for (int k = 0 ; k < treasure[j].first.size() ; k++) {  
  31.                  if (treasure[j].first[k] == '*') {  
  32.                      continue;  
  33.                  }  
  34.                  if (treasure[j].first[k] != have[k]) {  
  35.                      goto NEXT;  
  36.                  }  
  37.              }  
  38.              result += treasure[j].second;  
  39.              break;  
  40. NEXT:;  
  41.          }  
  42.      }  
  43.      cout << result << endl;  
  44.  }  
  45.  return 0;  
  46. }  

0 件のコメント:

コメントを投稿