Submission #4910577
Source Code Expand
#include<iostream>
#include<vector>
#include<queue>
//https://rco-contest-2017-qual.contest.atcoder.jp/tasks/rco_contest_2017_qual_a
using namespace std;
#define FOR(i,a) for(int i=0;i<a;i++)
#define DEBUG
typedef vector<int> piece;
typedef vector<vector<int> > ans;
typedef pair<int, int> P;
//(n-1)*2,(n-1)*2+1->x,y
int news[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int board[52][52]={{}};
void input(){
int pip;cin>>pip;cin>>pip;cin>>pip;
char hoge;
FOR(i,50){
FOR(j,50){
cin>>hoge;
board[i+1][j+1]=hoge-'0';
}
}
}
void debprint(ans in){
for(auto &hoge:in){
for(auto &piyo:hoge){
cout<<piyo<<" ";
}
cout<<endl;
}
cout<<endl;
}
void pieceprint(ans in){
int hogehoge[52][52];
FOR(i,52){
FOR(j,52){
hogehoge[i][j]=0;
}
}
for(auto &hoge:in){
FOR(kk,8){
hogehoge[hoge[2*kk]][hoge[2*kk+1]]++;
}
}
FOR(i,52){
FOR(j,52){
cout<<hogehoge[i][j];
}
cout<<endl;
}
}
void ansprint(ans in){
int hogehoge[52][52];
for(auto &hoge:in){
FOR(kk,8){
cout<<hoge[2*kk]<<" "<<hoge[2*kk+1]<<endl;
}
}
}
long long int score(ans hoge){
long long int anss=0;
for(auto $tei:hoge){
long long int seki=1;
FOR(i,8){
seki=seki*board[2*i][2*i+1];
}
anss+=seki;
}
return anss;
}
//なんがバグってる
ans make_easy_ans(){
int used[52][52];
FOR(j,52){
FOR(k,52){
used[j][k]=0;
}
}
int piecenum=0;
ans easyans;
for(int i=9;i>=1;i--){
FOR(j,52){
FOR(k,52){
if(board[j][k]==i and used[j][k]==0){
piece hoge;
hoge.push_back(j);
hoge.push_back(k);
int use[52][52];
FOR(c,52){
FOR(d,52){
if(used[c][d]==0){use[c][d]=0;}
else {use[c][d]=1;}
}
}
use[j][k]=1;
used[j][k]=1;
queue<P> near;
FOR(c,4){
if(use[j+news[c][0]][k+news[c][1]]==0){
near.push(P(j+news[c][0],k+news[c][1]));
use[j+news[c][0]][k+news[c][1]]=1;
}
}
int count=1;
while(count<8){
if(near.size()==0){
break;
}
int maxx=-1;
P maxxx=P(0,0);
FOR(p,near.size()){
P y=near.front();
near.pop();
if(board[y.first][y.second]>maxx){
near.push(maxxx);
maxxx=y;
maxx=board[y.first][y.second];
}
else{near.push(y);}
}
if(maxx<=0){
break;
}
else{
used[maxxx.first][maxxx.second]=1;
hoge.push_back(maxxx.first);
hoge.push_back(maxxx.second);
count++;
FOR(c,4){
if(use[maxxx.first+news[c][0]][maxxx.second+news[c][1]]==0){
near.push(P(maxxx.first+news[c][0],maxxx.second+news[c][1]));
use[maxxx.first+news[c][0]][maxxx.second+news[c][1]]=1;
}
}
}
if(count==8){
easyans.push_back(hoge);
piecenum++;
}
}
}
}
}
}
cout<<piecenum<<endl;
//debprint(easyans);
//pieceprint(easyans);
return easyans;
}
int main(){
input();
ans k[10];
k[0]=make_easy_ans();
ansprint(k[0]);
return 0;
}
Submission Info
Submission Time |
|
Task |
A - Multiple Pieces |
User |
atFFFofK |
Language |
C++14 (GCC 5.4.1) |
Score |
784613 |
Code Size |
3745 Byte |
Status |
AC |
Exec Time |
7 ms |
Memory |
384 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 |
79523 / 1343058 |
71914 / 1343058 |
80510 / 1343058 |
75244 / 1343058 |
89185 / 1343058 |
75589 / 1343058 |
82095 / 1343058 |
68932 / 1343058 |
81814 / 1343058 |
79807 / 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 |
6 ms |
384 KB |
subtask_01_02.txt |
AC |
6 ms |
384 KB |
subtask_01_03.txt |
AC |
6 ms |
384 KB |
subtask_01_04.txt |
AC |
6 ms |
384 KB |
subtask_01_05.txt |
AC |
7 ms |
384 KB |
subtask_01_06.txt |
AC |
6 ms |
384 KB |
subtask_01_07.txt |
AC |
6 ms |
384 KB |
subtask_01_08.txt |
AC |
6 ms |
384 KB |
subtask_01_09.txt |
AC |
6 ms |
384 KB |
subtask_01_10.txt |
AC |
6 ms |
384 KB |