Submission #1140732
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<int, int> P;
typedef pair<ll, ll> Pll;
typedef vector<int> Vi;
//typedef tuple<int, int, int> T;
#define FOR(i,s,x) for(int i=s;i<(int)(x);i++)
#define REP(i,x) FOR(i,0,x)
#define ALL(c) c.begin(), c.end()
#define DUMP( x ) cerr << #x << " = " << ( x ) << endl
const int dr[4] = {-1, 0, 1, 0};
const int dc[4] = {0, 1, 0, -1};
int H = 50, W = 50, K = 8;
int B[50][50], used[50][50];
const double TL = 9.7;
void dump() {
}
int evaluate() {
return 0;
}
void solve() {
chrono::system_clock::time_point start = chrono::system_clock::now();
random_device rnd;
mt19937 mt(rnd());
vector<pair<int, int>> ans;
vector<vector<pair<int, int>>> pos(10);
REP(i, H) REP(j, W) pos[B[i][j]].emplace_back(i, j);
memset(used, 0, sizeof(used));
for (int i = 9; i > 0; i--) {
REP(j, pos[i].size()) {
int sr, sc; tie(sr, sc) = pos[i][j];
if (used[sr][sc]) continue;
priority_queue<tuple<int, int, int>> pque;
pque.emplace(-i, sr, sc);
vector<pair<int, int>> cand;
auto tmp_used = used;
while (not pque.empty() and cand.size() < K) {
int p, r, c; tie(p, r, c) = pque.top(); pque.pop();
if (tmp_used[r][c]) continue;
tmp_used[r][c] = true;
cand.emplace_back(r, c);
REP(d, 4) {
int nr = r + dr[d], nc = c + dc[d];
if (0 <= nr and nr < H and 0 <= nc and nc < W and not tmp_used[nr][nc] and B[nr][nc] != 0) {
pque.emplace(-B[nr][nc], nr, nc);
}
}
}
if (cand.size() == K) {
for (auto p : cand) {
int r, c; tie(r, c) = p;
used[r][c] = true;
ans.emplace_back(r, c);
}
}
}
}
printf("%d\n", ans.size() / K);
for (auto p : ans) {
printf("%d %d\n", p.first + 1, p.second + 1);
}
/*
uniform_int_distribution<> rand3(0, 2);
int itr = 0;
while (true) {
double diff = chrono::duration_cast<chrono::milliseconds>(chrono::system_clock::now() - start).count() / 1000.;
if (diff > TL) break;
//cerr << chrono::duration_cast<chrono::milliseconds>(chrono::system_clock::now() - start).count() / 1000. << ' ' << itr << ' ' << best_scores[0] << endl;
itr++;
}
//cerr << itr << ' ' << best_scores[0] << endl;
dump();*/
}
int main() {
scanf("%d %d %d", &H, &W, &K);
REP(i, H) {
string row; cin >> row;
REP(j, W) B[i][j] = row[j] - '0';
}
solve();
return 0;
}
Submission Info
Submission Time
2017-03-04 20:28:18+0900
Task
A - Multiple Pieces
User
n_knuu
Language
C++14 (GCC 5.4.1)
Score
65408
Code Size
2598 Byte
Status
AC
Exec Time
2 ms
Memory
384 KB
Compile Error
./Main.cpp: In function ‘void solve()’:
./Main.cpp:71:32: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘std::vector<std::pair<int, int> >::size_type {aka long unsigned int}’ [-Wformat=]
printf("%d\n", ans.size() / K);
^
./Main.cpp: In function ‘int main()’:
./Main.cpp:92:32: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d %d", &H, &W, &K);
^
Judge Result
Set Name
test_01
test_02
test_03
test_04
test_05
test_06
test_07
test_08
test_09
test_10
Score / Max Score
3983 / 1343058
7177 / 1343058
9922 / 1343058
5438 / 1343058
7105 / 1343058
7250 / 1343058
6073 / 1343058
4344 / 1343058
9016 / 1343058
5100 / 1343058
Status
Set Name
Test Cases
test_01
subtask_01_01.txt
test_02
subtask_01_02.txt
test_03
subtask_01_03.txt
test_04
subtask_01_04.txt
test_05
subtask_01_05.txt
test_06
subtask_01_06.txt
test_07
subtask_01_07.txt
test_08
subtask_01_08.txt
test_09
subtask_01_09.txt
test_10
subtask_01_10.txt
Case Name
Status
Exec Time
Memory
subtask_01_01.txt
AC
2 ms
384 KB
subtask_01_02.txt
AC
2 ms
384 KB
subtask_01_03.txt
AC
2 ms
384 KB
subtask_01_04.txt
AC
2 ms
384 KB
subtask_01_05.txt
AC
2 ms
384 KB
subtask_01_06.txt
AC
2 ms
384 KB
subtask_01_07.txt
AC
2 ms
384 KB
subtask_01_08.txt
AC
2 ms
384 KB
subtask_01_09.txt
AC
2 ms
384 KB
subtask_01_10.txt
AC
2 ms
384 KB