Submission #603651
Source Code Expand
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
const int MOD=1e9+7;
int ct[26]={0};
int dp[40000000];
//現在の盤の状態nowSTのとき、posに置くことは出来るか
bool isValid(int st, int pos){
//置くことが許されている場所か判定する
bool valid=true;
//左右判定
if(pos%5==0 || pos%5==4){ //端なのでok
}
else{
//左隣と右隣のbitのXORをとって1なら片方空き、ダメ
if( ((st>>(pos-1))&1)^((st>>(pos+1))&1) ){
valid=false;
}
}
//上下判定
if(pos<5||19<pos){ //端なのでok
}
else{
//上と下のbitのXORをとって1なら片方空き、ダメ
if( ((st>>(pos-5))&1)^((st>>(pos+5))&1) ){
valid=false;
}
}
return valid;
}
int rec(int st){ //現在盤面の状態をビットで表す
if(dp[st]>=0) return dp[st];
//全てのマスが埋まった
if(st==(1<<25)-1) return 1;
int now=1; //今置こうとしている数字
for(int i=0; i<25; ++i){
if((st>>i)&1){ //既に数字が置かれている
++now;
}
}
//printf("now %d, ct:%d\n", now, ct[now]);
int ret=0;
if(ct[now]>=0){ //最初から指定されている
//置くはずの場所にすでにあるのはNG
if( ((st>>(ct[now]))&1) == 0 ){
if(isValid(st,ct[now])){
//printf("th %d\n", now);
ret =rec(st+(1<<ct[now]));
ret%=MOD;
}
}
}
else{ //決まってないのでおける位置を試す
for(int i=0; i<25; ++i){ //マスを左上から順に探していく
if((st>>i)&1){ //もう埋まってて置けない
continue;
}
if(isValid(st,i)){
//printf("put %d to %d\n", now, i);
ret += rec(st+(1<<i));
ret %= MOD;
}
//else printf("fail\n");
}
}
return dp[st]=ret;
}
int main(int argc, char const *argv[]) {
//初期化
for(int i=1; i<=25; ++i) ct[i]=-1;
//input
for(int i=0; i<25; ++i){
int x;
scanf(" %d", &x);
if(x>0) ct[x]=i;
//printf("ct[%d]=%d\n",x,ct[x]);
}
memset(dp,-1,sizeof(dp));
printf("%d\n", rec(0));
return 0;
}
Submission Info
Submission Time |
|
Task |
D - 25個の整数 |
User |
imulan |
Language |
C++ (GCC 4.9.2) |
Score |
100 |
Code Size |
2148 Byte |
Status |
AC |
Exec Time |
982 ms |
Memory |
157720 KB |
Compile Error
./Main.cpp: In function ‘int main(int, const char**)’:
./Main.cpp:91:19: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf(" %d", &x);
^
Judge Result
Set Name |
Sample |
Subtask1 |
Subtask2 |
Score / Max Score |
0 / 0 |
30 / 30 |
70 / 70 |
Status |
|
|
|
Set Name |
Test Cases |
Sample |
sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt |
Subtask1 |
sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, test-1-01.txt, test-1-02.txt, test-1-03.txt, test-1-04.txt, test-1-05.txt, test-1-06.txt, test-1-07.txt, test-1-08.txt, test-1-09.txt, test-1-10.txt, test-1-11.txt, test-1-12.txt, test-1-13.txt, test-1-14.txt, test-1-15.txt |
Subtask2 |
sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, test-1-01.txt, test-1-02.txt, test-1-03.txt, test-1-04.txt, test-1-05.txt, test-1-06.txt, test-1-07.txt, test-1-08.txt, test-1-09.txt, test-1-10.txt, test-1-11.txt, test-1-12.txt, test-1-13.txt, test-1-14.txt, test-1-15.txt, test-2-01.txt, test-2-02.txt, test-2-03.txt, test-2-04.txt, test-2-05.txt, test-2-06.txt, test-2-07.txt, test-2-08.txt, test-2-09.txt, test-2-10.txt |
Case Name |
Status |
Exec Time |
Memory |
sample-01.txt |
AC |
359 ms |
157584 KB |
sample-02.txt |
AC |
582 ms |
157588 KB |
sample-03.txt |
AC |
346 ms |
157592 KB |
sample-04.txt |
AC |
343 ms |
157588 KB |
test-1-01.txt |
AC |
350 ms |
157592 KB |
test-1-02.txt |
AC |
349 ms |
157592 KB |
test-1-03.txt |
AC |
348 ms |
157588 KB |
test-1-04.txt |
AC |
344 ms |
157592 KB |
test-1-05.txt |
AC |
347 ms |
157588 KB |
test-1-06.txt |
AC |
346 ms |
157624 KB |
test-1-07.txt |
AC |
342 ms |
157592 KB |
test-1-08.txt |
AC |
346 ms |
157588 KB |
test-1-09.txt |
AC |
352 ms |
157588 KB |
test-1-10.txt |
AC |
368 ms |
157524 KB |
test-1-11.txt |
AC |
380 ms |
157720 KB |
test-1-12.txt |
AC |
375 ms |
157572 KB |
test-1-13.txt |
AC |
385 ms |
157524 KB |
test-1-14.txt |
AC |
359 ms |
157548 KB |
test-1-15.txt |
AC |
354 ms |
157588 KB |
test-2-01.txt |
AC |
400 ms |
157596 KB |
test-2-02.txt |
AC |
455 ms |
157716 KB |
test-2-03.txt |
AC |
350 ms |
157588 KB |
test-2-04.txt |
AC |
367 ms |
157512 KB |
test-2-05.txt |
AC |
549 ms |
157592 KB |
test-2-06.txt |
AC |
982 ms |
157588 KB |
test-2-07.txt |
AC |
501 ms |
157592 KB |
test-2-08.txt |
AC |
693 ms |
157588 KB |
test-2-09.txt |
AC |
931 ms |
157600 KB |
test-2-10.txt |
AC |
889 ms |
157588 KB |