結果

問題 No.5002 stick xor
ユーザー e869120e869120
提出日時 2018-05-25 22:39:45
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 40 ms / 1,000 ms
コード長 1,540 bytes
コンパイル時間 2,739 ms
実行使用メモリ 1,552 KB
スコア 22,545
最終ジャッジ日時 2018-05-25 22:39:53
ジャッジサーバーID
(参考情報)
judge10 /
純コード判定しない問題か言語
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 38 ms
1,552 KB
testcase_01 AC 40 ms
1,548 KB
testcase_02 AC 40 ms
1,552 KB
testcase_03 AC 39 ms
1,552 KB
testcase_04 AC 39 ms
1,548 KB
testcase_05 AC 39 ms
1,548 KB
testcase_06 AC 38 ms
1,548 KB
testcase_07 AC 39 ms
1,548 KB
testcase_08 AC 39 ms
1,548 KB
testcase_09 AC 38 ms
1,548 KB
testcase_10 AC 38 ms
1,548 KB
testcase_11 AC 39 ms
1,548 KB
testcase_12 AC 39 ms
1,548 KB
testcase_13 AC 39 ms
1,548 KB
testcase_14 AC 39 ms
1,548 KB
testcase_15 AC 39 ms
1,552 KB
testcase_16 AC 39 ms
1,552 KB
testcase_17 AC 39 ms
1,548 KB
testcase_18 AC 39 ms
1,548 KB
testcase_19 AC 40 ms
1,552 KB
testcase_20 AC 39 ms
1,548 KB
testcase_21 AC 39 ms
1,552 KB
testcase_22 AC 39 ms
1,548 KB
testcase_23 AC 40 ms
1,548 KB
testcase_24 AC 40 ms
1,548 KB
testcase_25 AC 38 ms
1,552 KB
testcase_26 AC 39 ms
1,552 KB
testcase_27 AC 39 ms
1,548 KB
testcase_28 AC 39 ms
1,552 KB
testcase_29 AC 39 ms
1,548 KB
testcase_30 AC 39 ms
1,548 KB
testcase_31 AC 39 ms
1,552 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <ctime>
using namespace std;

struct State {
	int a[66][66];
};

int N, K, L[509]; State S;

void flip(int px, int py, int qx, int qy) {
	for (int i = px; i <= qx; i++) {
		for (int j = py; j <= qy; j++) S.a[i][j] ^= 1;
	}
}
vector<int> solve(vector<int>M, vector<int>query) {
	int maxn = -1; vector<int>V;

	for (int i = 0; i < 1000; i++) {
		vector<int>U = M; vector<int>C;
		for (int j = 0; j < query.size(); j++) {
			int p1 = rand() % (N - query[j] + 1); C.push_back(p1 + 1);
			for (int k = p1; k < p1 + query[j]; k++) U[k] ^= 1;
		}
		int T = 0;
		for (int j = 0; j < U.size(); j++) {
			if (U[j] == 1) T++;
		}
		if (maxn < T) { maxn = T; V = C; }
	}
	return V;
}

int main() {
	srand((unsigned)time(NULL));
	cin >> N >> K;
	for (int i = 1; i <= K; i++) cin >> L[i];
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			char c; cin >> c;
			if (c == '0') S.a[i][j] = 1;
			else S.a[i][j] = 0;
		}
	}
	int s = 1;
	for (int i = 1; i <= N; i++) {
		int t = (K - i + N) / N;
		vector<int>I, J;
		for (int j = s; j < s + t; j++) I.push_back(L[j]);
		for (int j = 1; j <= N; j++) J.push_back(S.a[i][j]);
		vector<int>Y = solve(J, I);
		for (int j = 0; j < Y.size(); j++) {
			cout << i << " " << Y[j] << " " << i << " " << Y[j] + I[j] - 1 << endl;
			flip(i, Y[j], i, Y[j] + I[j] - 1);
		}
		s += t;
	}
	int score = 0;
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			if (S.a[i][j] == 1) score++;
		}
	}
	//cout << "#score = " << score << endl;
	return 0;
}
0