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を利用したほうがタイプ量が少なくてすみそう.