문제

링크

풀이

#include <iostream>
#include <utility>
#include <vector>
using namespace std;
 
pair<int, int> find(vector<vector<int> > &a, int x) {
  for (int i=0; i<5; i++) {
    for (int j=0; j<5; j++) {
      if (a[i][j] == x) return make_pair(i, j);
    }
  }
  return make_pair(-1, -1);
}
 
int score(vector<vector<bool> > &check) {
  int ret = 0;
  bool flag = true;
 
  for (int i=0; i<5; i++) {
    flag = true;
    for (int j=0; j<5; j++) {
      if (!check[i][j]) {
        flag = false;
        break;
      }
    }
    if (flag) ret++;
    flag = true;
    for (int j=0; j<5; j++) {
      if (!check[j][i]) {
        flag = false;
        break;
      }
    }
    if (flag) ret++;
  }
 
  flag = true;
  for (int i=0; i<5; i++) {
    if (!check[i][i]) {
      flag = false;
      break;
    }
  }
  if (flag) ret++;
 
  flag = true;
  for (int i=0; i<5; i++) {
    if (!check[i][4-i]) {
      flag = false;
      break;
    }
  }
  if (flag) ret++;
 
  return ret;
}
 
void solve(void) {
  vector<vector<int> > a(5, vector<int>(5));
  vector<vector<bool> > check(5, vector<bool>(5, false));
  for (int i=0; i<5; i++) {
    for (int j=0; j<5; j++) {
      cin >> a[i][j];
    }
  }
 
  int tmp;
  for (int i=0; i<25; i++) {
    cin >> tmp;
    pair<int, int> pos = find(a, tmp);
    check[pos.first][pos.second] = true;
    if (score(check) >= 3) {
      cout << i+1;
      return;
    }
  }
}
 
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  solve();
  return 0;
}