SRM469 TheMoviesLevelOneDivTwo
連続した2席があるかを見ていくだけ.
#include <iostream> #include <vector> using namespace std; class TheMoviesLevelOneDivTwo { public: int find(int n, int m, vector <int> row, vector <int> seat) { int ret = 0; int s[n][m]; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) s[i][j] = 0; for(int i = 0; i < row.size(); i++) s[row[i] - 1][seat[i] - 1] = 1; for(int i = n - 1; i >= 0; i--) for(int j = 0; j < m - 1; j++) if(!s[i][j] && !s[i][j+1]) ret++; for(int i = n - 1; i >= 0; i--){ for(int j = 0; j < m; j++){ cout << s[i][j] << " "; } cout << endl; } return ret; } };
600の問題は,ほかの人の回答を見るとnext_permutationを使ってた.配列の初期化はmemsetを利用したほうがタイプ量が少なくてすみそう.