Task: | Shakki |
Sender: | |
Submission time: | 2015-12-04 21:52:02 +0200 |
Language: | C++ |
Status: | READY |
Result: | 100 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 28 |
#2 | ACCEPTED | 21 |
#3 | ACCEPTED | 24 |
#4 | ACCEPTED | 27 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.06 s | 1 | details |
#2 | ACCEPTED | 0.07 s | 1 | details |
#3 | ACCEPTED | 0.06 s | 1 | details |
#4 | ACCEPTED | 0.05 s | 1 | details |
#5 | ACCEPTED | 0.06 s | 1 | details |
#6 | ACCEPTED | 0.05 s | 1 | details |
#7 | ACCEPTED | 0.05 s | 1 | details |
#8 | ACCEPTED | 0.06 s | 1 | details |
#9 | ACCEPTED | 0.06 s | 1 | details |
#10 | ACCEPTED | 0.06 s | 1 | details |
#11 | ACCEPTED | 0.06 s | 2 | details |
#12 | ACCEPTED | 0.06 s | 2 | details |
#13 | ACCEPTED | 0.06 s | 2 | details |
#14 | ACCEPTED | 0.06 s | 2 | details |
#15 | ACCEPTED | 0.06 s | 2 | details |
#16 | ACCEPTED | 0.06 s | 2 | details |
#17 | ACCEPTED | 0.05 s | 2 | details |
#18 | ACCEPTED | 0.05 s | 2 | details |
#19 | ACCEPTED | 0.05 s | 2 | details |
#20 | ACCEPTED | 0.06 s | 2 | details |
#21 | ACCEPTED | 0.06 s | 3 | details |
#22 | ACCEPTED | 0.05 s | 3 | details |
#23 | ACCEPTED | 0.06 s | 3 | details |
#24 | ACCEPTED | 0.05 s | 3 | details |
#25 | ACCEPTED | 0.05 s | 3 | details |
#26 | ACCEPTED | 0.06 s | 3 | details |
#27 | ACCEPTED | 0.05 s | 3 | details |
#28 | ACCEPTED | 0.05 s | 3 | details |
#29 | ACCEPTED | 0.06 s | 3 | details |
#30 | ACCEPTED | 0.06 s | 3 | details |
#31 | ACCEPTED | 0.06 s | 4 | details |
#32 | ACCEPTED | 0.05 s | 4 | details |
#33 | ACCEPTED | 0.05 s | 4 | details |
#34 | ACCEPTED | 0.06 s | 4 | details |
#35 | ACCEPTED | 0.05 s | 4 | details |
#36 | ACCEPTED | 0.06 s | 4 | details |
#37 | ACCEPTED | 0.05 s | 4 | details |
#38 | ACCEPTED | 0.05 s | 4 | details |
#39 | ACCEPTED | 0.05 s | 4 | details |
#40 | ACCEPTED | 0.05 s | 4 | details |
Compiler report
input/code.cpp: In function 'unsigned int rot_4x4(unsigned int, int, int)': input/code.cpp:28:23: warning: suggest parentheses around '+' inside '<<' [-Wparentheses] auto n=b&~(0x33<<y*4+x); ^ input/code.cpp:29:15: warning: suggest parentheses around '+' inside '<<' [-Wparentheses] n|=(b&1<<y*4+x)<<1; ^ input/code.cpp:30:17: warning: suggest parentheses around '+' inside '<<' [-Wparentheses] n|=(b&1<<y*4+x+1)<<4; ^ input/code.cpp:31:19: warning: suggest parentheses around '+' inside '<<' [-Wparentheses] n|=(b&1<<(y+1)*4+x)>>4; ^ input/code.cpp:32:21: warning: suggest parentheses around '+' inside '<<' [-Wparentheses] n|=(b&1<<(y+1)*4+x+1)>>1; ^ input/code.cpp: In function 'std::vector<int> solve(std::vector<std::basic_string<char> >)': input/code.cpp:87:44: warning: suggest parentheses around '+' inside '<<' [-Wparentheses] if(M[Y*4+y][X*4+x]=='M')block|=1<<y*4+x;...
Code
#include <algorithm> #include <iostream> #include <string> #include <unordered_set> #include <vector> int rand7() { static const std::string s( "5015540611051231243566552452031661504340134160300563316012010431135015620614453361203302525024326505" "2623155036566160535224424125015461313304246265065165356245006244540661040226431314252500050260115262" "4101620532516146036314323665123532110665243521362516664055414325303423440040065613232106041205542621" "2636143001406404503020215012242066553031202151033421142521414660612316446533514521034404121304153401" "6351020103256141424211630505121645256225225334503516140352536455503634401463433124643246636015143366" "3460443046460530554223025513331622613212443433013302213132350125614353531412350155656315030342253455" "1631360205010562052142300015654503352321224516404112466056004426150556244502112046320632025236452366" "0153203001513410221662432464136124446130253550433402112343252355611446234001262215032156136020103305" "0234023052151142565523432541442663223212335156603212501614204122102513050545633654560303441361566116" "5412134645331550404341564343313344511340151413022330010251356334136250142223131036040352024212104325"); static int i=0; return s[i++%s.size()] - '0'; } const unsigned P16=1<<16; unsigned depth_4x4[P16]; unsigned yx_4x4[P16]; unsigned rot_4x4(unsigned b,int x,int y){ auto n=b&~(0x33<<y*4+x); n|=(b&1<<y*4+x)<<1; n|=(b&1<<y*4+x+1)<<4; n|=(b&1<<(y+1)*4+x)>>4; n|=(b&1<<(y+1)*4+x+1)>>1; return n; } std::vector<int> get_counts(const std::vector<std::string>&M){ std::vector<int>counts(4); for(int y=0;y<8;++y)for(int x=0;x<8;++x)counts[y/4*2+x/4]+=M[y][x]=='M'; return counts; } int balance(const std::vector<int>&counts){ int b=0; for(int c:counts)b+=abs(c-8); return b; } void rot(std::vector<std::string>&M,int x,int y){ std::swap(M[y][x],M[y][x+1]); std::swap(M[y+1][x],M[y][x]); std::swap(M[y+1][x+1],M[y+1][x]); } std::vector<int> solve(std::vector<std::string>M){ std::vector<int>solution; for(;;){ auto cs=get_counts(M); if(cs[0]==8&&cs[1]==8&&cs[2]==8)break; for(int y=0;y<7;++y){ for(int x=0;x<7;++x){ rot(M,x,y); auto cs2=get_counts(M); if(balance(cs2)<balance(cs)){ solution.push_back(y*8+x); goto next; } else{ rot(M,x,y); rot(M,x,y); rot(M,x,y); } } } { int x=rand7(); int y=rand7(); rot(M,x,y); solution.push_back(y*8+x); } next:; } for(int Y=0;Y<2;++Y)for(int X=0;X<2;++X){ auto block=0u; for(int y=0;y<4;++y)for(int x=0;x<4;++x) if(M[Y*4+y][X*4+x]=='M')block|=1<<y*4+x; while(depth_4x4[block]){ auto yx=yx_4x4[block]; auto y=yx/4+Y*4; auto x=yx%4+X*4; solution.push_back(y*8+x); block=rot_4x4(block,yx%4,yx/4); } } return solution; } int main(){ for(int i=0;i<P16;++i)depth_4x4[i]=999999; unsigned solved=0x5A5A; depth_4x4[solved]=0; for(unsigned depth=1;;++depth){ std::unordered_set<unsigned>prev; for(int i=0;i<P16;++i)if(depth_4x4[i]==depth-1)prev.insert(i); if(prev.empty())break; for(auto p:prev)for(int y=0;y<3;++y)for(int x=0;x<3;++x){ auto n=rot_4x4(p,x,y); n=rot_4x4(n,x,y); n=rot_4x4(n,x,y); if(depth_4x4[n]>depth){ depth_4x4[n]=depth; yx_4x4[n]=y*4+x; } } } std::vector<std::string>M(8); for(auto&s:M)std::cin>>s; auto solution=solve(M); for(auto&s:M)for(auto&c:s)c="MV"[c=='M']; auto solution2=solve(M); if(solution2.size()<solution.size())solution=std::move(solution2); std::cout<<solution.size()<<'\n'; for(int yx:solution)std::cout<<yx%8+1<<' '<<yx/8+1<<'\n'; }
Test details
Test 1
Group: 1
Verdict: ACCEPTED
input |
---|
VMMVVMVV MMVVMVVV MMVVMMMM MVVVMVVM MVVVVMVM ... |
correct output |
---|
100000 |
user output |
---|
26 1 4 2 3 3 1 3 3 ... |
Test 2
Group: 1
Verdict: ACCEPTED
input |
---|
MVMVVMMV VVMMVVVV VMMVMMVM MVVVVMVM MVMVMMVM ... |
correct output |
---|
100000 |
user output |
---|
23 1 4 6 4 3 2 2 2 ... |
Test 3
Group: 1
Verdict: ACCEPTED
input |
---|
VMMMVMVV MMMVMVMV VMMVMVVM VVVMVMMV MVMVMVMV ... |
correct output |
---|
100000 |
user output |
---|
25 4 4 1 3 1 3 2 3 ... |
Test 4
Group: 1
Verdict: ACCEPTED
input |
---|
VVVMVMVV VMMVMVMM MVVMMVMV VMVMMVMM MMVVMMVM ... |
correct output |
---|
100000 |
user output |
---|
37 4 2 4 6 6 1 2 6 ... |
Test 5
Group: 1
Verdict: ACCEPTED
input |
---|
MVMVVMMM VVMMVVMV MVVMVVMM VMVMVMMV MMVMVVVM ... |
correct output |
---|
100000 |
user output |
---|
99 6 1 2 6 6 5 1 7 ... |
Test 6
Group: 1
Verdict: ACCEPTED
input |
---|
VMMVMVVM VVMMVVMM MMMVMVVM VMMVMMVM MVMVMMMV ... |
correct output |
---|
100000 |
user output |
---|
23 2 4 4 4 1 2 1 1 ... |
Test 7
Group: 1
Verdict: ACCEPTED
input |
---|
MVVVVMMM MMMMMMMM VVVVVMMV MMVVMVVM VMVVVVMV ... |
correct output |
---|
100000 |
user output |
---|
62 4 1 6 1 2 6 6 5 ... |
Test 8
Group: 1
Verdict: ACCEPTED
input |
---|
VMMVMVMM MMMVVMMM MVVVVVVV VVVVMMMV MVVVMVVM ... |
correct output |
---|
100000 |
user output |
---|
46 4 3 1 4 6 1 2 6 ... |
Test 9
Group: 1
Verdict: ACCEPTED
input |
---|
VVVVVMMM MMVVVVVV MVVVMMMM VVMVVVVM VMMVMVMM ... |
correct output |
---|
100000 |
user output |
---|
52 3 4 6 1 2 6 6 5 ... |
Test 10
Group: 1
Verdict: ACCEPTED
input |
---|
VMMVMMMM VVMVVVVV VMMVMVMV VMMVMVMM VVVMMMMM ... |
correct output |
---|
100000 |
user output |
---|
24 4 2 1 2 1 3 3 1 ... |
Test 11
Group: 2
Verdict: ACCEPTED
input |
---|
VMVMVVMM MMVMVVMM VMVVVMMV VVVMVMVM VVMMVVMM ... |
correct output |
---|
25000 |
user output |
---|
38 4 5 4 5 7 2 3 1 ... |
Test 12
Group: 2
Verdict: ACCEPTED
input |
---|
MVMVVMVV VMMVVMVM VMVVVMMM VMMMMVVM MMVVVMMM ... |
correct output |
---|
25000 |
user output |
---|
39 4 6 6 1 2 6 6 5 ... |
Test 13
Group: 2
Verdict: ACCEPTED
input |
---|
MVVMMVVV MMVVMVMM VVVMVMVV VMVMMMMM MVVMMVMV ... |
correct output |
---|
25000 |
user output |
---|
38 6 1 2 6 6 5 1 7 ... |
Test 14
Group: 2
Verdict: ACCEPTED
input |
---|
VVMMMVMV VMVVVMVV VVMVVVMM MVVMVMVM MMVVMMMM ... |
correct output |
---|
25000 |
user output |
---|
46 1 4 6 1 2 6 6 5 ... |
Test 15
Group: 2
Verdict: ACCEPTED
input |
---|
MVVVMVVV MMMMVMMM MVMMMVVM MMVVVMVM VMVVVMMV ... |
correct output |
---|
25000 |
user output |
---|
64 1 4 1 3 3 7 5 4 ... |
Test 16
Group: 2
Verdict: ACCEPTED
input |
---|
VMMVMVVM VMMVVVVV MVMVMMVM VMMVVVMV VVMVMMVM ... |
correct output |
---|
25000 |
user output |
---|
23 5 4 5 4 3 3 2 2 ... |
Test 17
Group: 2
Verdict: ACCEPTED
input |
---|
MVVMMVVM MVVVMMMV MVVMMVVM VMMVMVMV VMMVMMMM ... |
correct output |
---|
25000 |
user output |
---|
23 4 2 1 1 3 1 2 1 ... |
Test 18
Group: 2
Verdict: ACCEPTED
input |
---|
MVMMVVMM VVMMMMVV VMVVVVVM MVMMMVMV VMVVVMVM ... |
correct output |
---|
25000 |
user output |
---|
18 4 2 3 1 3 3 3 2 ... |
Test 19
Group: 2
Verdict: ACCEPTED
input |
---|
MVVVVVVV VMMVMVVM VMVMMMMV MVMVMMMM MMVVVMMM ... |
correct output |
---|
25000 |
user output |
---|
28 4 1 4 5 2 1 1 1 ... |
Test 20
Group: 2
Verdict: ACCEPTED
input |
---|
MVVVMMMM MMVMMVMV MVVVVVMM VVMMMVVM VVVMVMVV ... |
correct output |
---|
25000 |
user output |
---|
24 4 1 7 4 3 3 1 2 ... |
Test 21
Group: 3
Verdict: ACCEPTED
input |
---|
VMVVMVMM MMMMVMMV VVVMVVVV MVMVMVVM VMMVMMMM ... |
correct output |
---|
5000 |
user output |
---|
18 5 4 2 1 3 2 3 1 ... |
Test 22
Group: 3
Verdict: ACCEPTED
input |
---|
VVVVVVMM MMMVMMVV VVVVVVMV MMMVMVVV MVVMMMMV ... |
correct output |
---|
5000 |
user output |
---|
50 5 4 7 4 4 2 7 1 ... |
Test 23
Group: 3
Verdict: ACCEPTED
input |
---|
MMVMVMVV MMVVMVVM VMMVVMVM MMMMMMVV MVVVVMVM ... |
correct output |
---|
5000 |
user output |
---|
80 4 4 1 5 3 5 7 3 ... |
Test 24
Group: 3
Verdict: ACCEPTED
input |
---|
MVMVVMVM VVMVVMVM MMMMVMVV MVVMMVVV MMMMMVVV ... |
correct output |
---|
5000 |
user output |
---|
85 4 5 6 1 2 6 6 5 ... |
Test 25
Group: 3
Verdict: ACCEPTED
input |
---|
MVVVMVVM MMMMVVMV VMMVMMVV VVMVMVMV MVMMMVMM ... |
correct output |
---|
5000 |
user output |
---|
36 6 1 2 6 6 5 1 7 ... |
Test 26
Group: 3
Verdict: ACCEPTED
input |
---|
VMVMVVVM MMMVVVMM MMVVVVVM VVVVMMVV VMMVVMMV ... |
correct output |
---|
5000 |
user output |
---|
50 6 4 7 2 3 1 4 4 ... |
Test 27
Group: 3
Verdict: ACCEPTED
input |
---|
MMVMMVVM MVVVMVMV MVVVMVVM VMVMMMVV VMMVVVVV ... |
correct output |
---|
5000 |
user output |
---|
26 2 4 4 7 3 3 1 1 ... |
Test 28
Group: 3
Verdict: ACCEPTED
input |
---|
MVMMVMMV VMVMMMVV MMMMVVMV VVVVMMMM MMMVMMVV ... |
correct output |
---|
5000 |
user output |
---|
43 7 4 6 1 2 6 6 5 ... |
Test 29
Group: 3
Verdict: ACCEPTED
input |
---|
VVVVMVMV MMMVVMVM MVVVMVMV VVVMVVMM VMMMMMVV ... |
correct output |
---|
5000 |
user output |
---|
36 2 4 2 4 6 1 2 6 ... |
Test 30
Group: 3
Verdict: ACCEPTED
input |
---|
MVVVMVVV MMVVMMMM MVVVVVVV MVMVMMMV VMMMVMMM ... |
correct output |
---|
5000 |
user output |
---|
56 6 1 2 6 6 5 1 7 ... |
Test 31
Group: 4
Verdict: ACCEPTED
input |
---|
MVMMVMMV VVVMMVVV VMMVVMMV VVMMMVVM VVVMMMVV ... |
correct output |
---|
250 |
user output |
---|
36 5 4 4 6 7 7 6 6 ... |
Test 32
Group: 4
Verdict: ACCEPTED
input |
---|
VVMMVVVM VMVVMMVV VMMMMMMV VVMVMVVV VMMVMVMM ... |
correct output |
---|
250 |
user output |
---|
31 5 4 6 1 2 6 6 5 ... |
Test 33
Group: 4
Verdict: ACCEPTED
input |
---|
MMVVMVMV VVVMVMMM VVVVMVMM MVVMVVMV VMMVMVVM ... |
correct output |
---|
250 |
user output |
---|
71 4 5 7 6 2 3 4 6 ... |
Test 34
Group: 4
Verdict: ACCEPTED
input |
---|
VMVMVVMV MVVMMMMM MMVVMMMM VMVMVVVM VMMMVVVM ... |
correct output |
---|
250 |
user output |
---|
84 7 4 4 5 6 1 2 6 ... |
Test 35
Group: 4
Verdict: ACCEPTED
input |
---|
VMVMVMMM VMMVVVMM MMVMVMMM MVMMVVVV VMMVMMMV ... |
correct output |
---|
250 |
user output |
---|
143 4 4 6 1 2 6 6 5 ... |
Test 36
Group: 4
Verdict: ACCEPTED
input |
---|
MVMVMVMM MVMVMMMV MMVVVVMM MVMVVVVV VMMMVVMM ... |
correct output |
---|
250 |
user output |
---|
23 1 1 3 1 3 1 1 1 ... |
Test 37
Group: 4
Verdict: ACCEPTED
input |
---|
VMMMMVMM VVMMMVMV VMVVVVVV MVMMMVVM VMVMMVVM ... |
correct output |
---|
250 |
user output |
---|
24 4 2 2 2 3 3 1 2 ... |
Test 38
Group: 4
Verdict: ACCEPTED
input |
---|
VMMVMVMV VVMVMVMM MMMVMVMM MVVVVMMM MMVVVMVV ... |
correct output |
---|
250 |
user output |
---|
29 4 1 5 4 7 4 3 2 ... |
Test 39
Group: 4
Verdict: ACCEPTED
input |
---|
MMMMMVMV MVVMMMMV VMVVVVMM VMVVVMMV MVMMMVMM ... |
correct output |
---|
250 |
user output |
---|
103 1 5 3 5 7 3 7 6 ... |
Test 40
Group: 4
Verdict: ACCEPTED
input |
---|
VMMMMMMV VMMVVVVV MVMMVMMV MVVVVMMV MVVVVMMM ... |
correct output |
---|
250 |
user output |
---|
23 4 1 4 5 1 2 1 1 ... |