SRM 515 Div2 Easy FortunateNumbers

問題

5と8からなる数字をfortunate numbersと呼ぶ.a, b, cのリストが与えられた時a[i]+b[j]+c[k]で表されるfortunate numbersの数を答えよ.同じfortunate numbersを重複して数えないように注意する.

解答

問題通りにシミュレーションを行うだけ.

class FortunateNumbers
{
public:
  int getFortunate(vector <int> a, vector <int> b, vector <int> c)
    {
      map<int, bool> m;
      int i, j, k;
      int res = 0;
      for(i = 0; i < a.size(); i++){
        for(j = 0; j < b.size(); j++){
          for(k = 0; k < c.size(); k++){
            int v = a[i] + b[j] + c[k];
            bool fortunate = true;
            while (v > 0){
              if (!(v % 10 == 5 || v % 10 == 8 )){
                fortunate = false;
                break;
              }
              v /= 10;
            }
            v = a[i] + b[j] + c[k];
            if (fortunate && m.find(v) == m.end()){
              m[v] = true;
              res++;
              // cout << v << endl;
            }
          }
        }
      }
      return res;
    }
};