Submission #1400037


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

int h = 50, w = 50, k = 8;
string s[51];
bool f[51][51];

vector<pair<int, int> > make_piece(int y, int x, int l){
    int dy[4] = {1, -1, 0, 0};
    int dx[4] = {0, 0, 1, -1};
    // bool g[51][51] = {};
    // for(int i = 0; i < h; i++){
    //     for(int j = 0; j < w; j++){
    //         g[i][j] = f[i][j];
    //     }
    // }
    vector<pair<int, int> > res;
    queue<pair<int, int> > q;
    q.push(pair<int, int>(y, x));
    res.push_back(pair<int, int>(y, x));
    f[y][x] = true;
    int cnt = 1;
    while(!q.empty()){
        pair<int, int> p = q.front(); q.pop();
        for(int i = 0; i < 4; i++){
            int ny = p.first + dy[i];
            int nx = p.second + dx[i];
            if(!(0 <= ny && ny < h && 0 <= nx && nx < w) || f[ny][nx]) continue;
            if((s[ny][nx] - '0') < l) continue;
            res.push_back(pair<int, int>(ny, nx));
            q.push(pair<int, int>(ny, nx));
            f[ny][nx] = true;
            cnt++;
            if(cnt == k) break;
        }
    }
    if(cnt == k) return res;
    for(int i = 0; i < res.size(); i++){
        f[res[i].first][res[i].second] = false;
    }
    res.clear();
    return res;
}

//sample : 13425万
int main(){
	cin >> h >> w >> k;
	for(int i = 0; i < h; i++) cin >> s[i];
	vector<vector<pair<int, int> > > ans;
    vector<pair<int, int> > tmp;
    
    for(int l = 7; l > 0; l--){
        for(int m = 9; m > 0; m--){
            for(int i = 0; i < h; i++){
                for(int j = 0; j < w; j++){
                    if((s[i][j] - '0') == m && f[i][j] == false){
                        tmp = make_piece(i, j, l);
                        // cout << tmp.size() << endl;
                        if(tmp.size() == k){
                            ans.push_back(tmp);
                        }
                    }
                }
            }
        }
    }

	int c = ans.size();
	cout << c << endl;
	for(int i = 0; i < c; i++){
		for(int j = 0; j < k; j++){
			cout << ans[i][j].first + 1 << " " << ans[i][j].second + 1 << endl;
		}
	}
}

Submission Info

Submission Time
Task A - Multiple Pieces
User treeone
Language C++14 (GCC 5.4.1)
Score 515618
Code Size 2159 Byte
Status AC
Exec Time 120 ms
Memory 256 KB

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 52658 / 1343058 55291 / 1343058 50999 / 1343058 51421 / 1343058 53236 / 1343058 49552 / 1343058 45197 / 1343058 45856 / 1343058 57253 / 1343058 54155 / 1343058
Status
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
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 44 ms 256 KB
subtask_01_02.txt AC 31 ms 256 KB
subtask_01_03.txt AC 55 ms 256 KB
subtask_01_04.txt AC 60 ms 256 KB
subtask_01_05.txt AC 120 ms 256 KB
subtask_01_06.txt AC 71 ms 256 KB
subtask_01_07.txt AC 83 ms 256 KB
subtask_01_08.txt AC 56 ms 256 KB
subtask_01_09.txt AC 39 ms 256 KB
subtask_01_10.txt AC 50 ms 256 KB