| 提出番号 | 1310 |
|---|---|
| 提出者 | nii_nii |
| 言語 | C++ |
| 提出日時 | 2018-06-21 06:59:32 |
| 問題名 | (62)SuperCon2018(独自テスト) |
| 結果 | CE |
| 点数 | 0 |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 1 | CE | 0 | 0ms | 0KB |
| 2 | CE | 0 | 0ms | 0KB |
| 3 | CE | 0 | 0ms | 0KB |
| 4 | CE | 0 | 0ms | 0KB |
| 5 | CE | 0 | 0ms | 0KB |
| 6 | CE | 0 | 0ms | 0KB |
| 7 | CE | 0 | 0ms | 0KB |
| 8 | CE | 0 | 0ms | 0KB |
| 9 | CE | 0 | 0ms | 0KB |
| 10 | CE | 0 | 0ms | 0KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 11 | CE | 0 | 0ms | 0KB |
| 12 | CE | 0 | 0ms | 0KB |
| 13 | CE | 0 | 0ms | 0KB |
| 14 | CE | 0 | 0ms | 0KB |
| 15 | CE | 0 | 0ms | 0KB |
| 16 | CE | 0 | 0ms | 0KB |
| 17 | CE | 0 | 0ms | 0KB |
| 18 | CE | 0 | 0ms | 0KB |
| 19 | CE | 0 | 0ms | 0KB |
| 20 | CE | 0 | 0ms | 0KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 21 | CE | 0 | 0ms | 0KB |
| 22 | CE | 0 | 0ms | 0KB |
| 23 | CE | 0 | 0ms | 0KB |
| 24 | CE | 0 | 0ms | 0KB |
| 25 | CE | 0 | 0ms | 0KB |
| 26 | CE | 0 | 0ms | 0KB |
| 27 | CE | 0 | 0ms | 0KB |
| 28 | CE | 0 | 0ms | 0KB |
| 29 | CE | 0 | 0ms | 0KB |
| 30 | CE | 0 | 0ms | 0KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 31 | CE | 0 | 0ms | 0KB |
| 32 | CE | 0 | 0ms | 0KB |
| 33 | CE | 0 | 0ms | 0KB |
| 34 | CE | 0 | 0ms | 0KB |
| 35 | CE | 0 | 0ms | 0KB |
| 36 | CE | 0 | 0ms | 0KB |
| 37 | CE | 0 | 0ms | 0KB |
| 38 | CE | 0 | 0ms | 0KB |
| 39 | CE | 0 | 0ms | 0KB |
| 40 | CE | 0 | 0ms | 0KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 41 | CE | 0 | 0ms | 0KB |
| 42 | CE | 0 | 0ms | 0KB |
| 43 | CE | 0 | 0ms | 0KB |
| 44 | CE | 0 | 0ms | 0KB |
| 45 | CE | 0 | 0ms | 0KB |
| 46 | CE | 0 | 0ms | 0KB |
| 47 | CE | 0 | 0ms | 0KB |
| 48 | CE | 0 | 0ms | 0KB |
| 49 | CE | 0 | 0ms | 0KB |
| 50 | CE | 0 | 0ms | 0KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 51 | CE | 0 | 0ms | 0KB |
| 52 | CE | 0 | 0ms | 0KB |
| 53 | CE | 0 | 0ms | 0KB |
| 54 | CE | 0 | 0ms | 0KB |
| 55 | CE | 0 | 0ms | 0KB |
| 56 | CE | 0 | 0ms | 0KB |
| 57 | CE | 0 | 0ms | 0KB |
| 58 | CE | 0 | 0ms | 0KB |
| 59 | CE | 0 | 0ms | 0KB |
| 60 | CE | 0 | 0ms | 0KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 61 | CE | 0 | 0ms | 0KB |
| 62 | CE | 0 | 0ms | 0KB |
| 63 | CE | 0 | 0ms | 0KB |
| 64 | CE | 0 | 0ms | 0KB |
| 65 | CE | 0 | 0ms | 0KB |
| 66 | CE | 0 | 0ms | 0KB |
| 67 | CE | 0 | 0ms | 0KB |
| 68 | CE | 0 | 0ms | 0KB |
| 69 | CE | 0 | 0ms | 0KB |
| 70 | CE | 0 | 0ms | 0KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 71 | CE | 0 | 0ms | 0KB |
| 72 | CE | 0 | 0ms | 0KB |
| 73 | CE | 0 | 0ms | 0KB |
| 74 | CE | 0 | 0ms | 0KB |
| 75 | CE | 0 | 0ms | 0KB |
| 76 | CE | 0 | 0ms | 0KB |
| 77 | CE | 0 | 0ms | 0KB |
| 78 | CE | 0 | 0ms | 0KB |
| 79 | CE | 0 | 0ms | 0KB |
| 80 | CE | 0 | 0ms | 0KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 81 | CE | 0 | 0ms | 0KB |
| 82 | CE | 0 | 0ms | 0KB |
| 83 | CE | 0 | 0ms | 0KB |
| 84 | CE | 0 | 0ms | 0KB |
| 85 | CE | 0 | 0ms | 0KB |
| 86 | CE | 0 | 0ms | 0KB |
| 87 | CE | 0 | 0ms | 0KB |
| 88 | CE | 0 | 0ms | 0KB |
| 89 | CE | 0 | 0ms | 0KB |
| 90 | CE | 0 | 0ms | 0KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 91 | CE | 0 | 0ms | 0KB |
| 92 | CE | 0 | 0ms | 0KB |
| 93 | CE | 0 | 0ms | 0KB |
| 94 | CE | 0 | 0ms | 0KB |
| 95 | CE | 0 | 0ms | 0KB |
| 96 | CE | 0 | 0ms | 0KB |
| 97 | CE | 0 | 0ms | 0KB |
| 98 | CE | 0 | 0ms | 0KB |
| 99 | CE | 0 | 0ms | 0KB |
| 100 | CE | 0 | 0ms | 0KB |
#include <stdio.h>
#include <vector>
#include "sc1.h"
using namespace std;
//
//scN:SALの長さN=14,16,18,20
//scM:障害物の数M=1,2,3,4,5,6,7,8,9,10
//scB[2][10]:障害物の位置を表す座標を格納する配列
//scB[0][n]はn+1番目の障害物のx座標
//scB[1][n]はn+1番目の障害物のy座標
//
int myabs(int n){//abs自作
if(n>=0){
return n;
}else{
return -n;
}
}
//
int cul(int x,int y){//計算用
return (x-(-10))+21*(y-(-10));
}
//
bool obst[441];//障害物ありますか
void read_obstacles(){
obst[cul(0,0)]=1;//原点だめ
for(int i=0;i<scM;i++){
int x=scB[0][i],y=scB[1][i];
if(myabs(x)+myabs(y)>scN/2){//絶対に通らない点は排除
continue;
}else{//通る可能性があったら
obst[cul(x,y)]=1;
}
}
}
//
vector<vector<int> > road_to_vertex[441][4];//各頂点について行き方を格納//(-10,-10)が0番目です
int d[4]={-21,-1,1,21};
bool used[441];
void serch_road_to_vertex(int now,int cnt,vector<int> how_to_go){//DFS
if(cnt==scN/2){
int t=how_to_go[scN/2-1]-how_to_go[scN/2-2];//計算
if(t==-21){//折り返し一歩手前でわけわけして格納
road_to_vertex[now][0].push_back(how_to_go);
}else if(t==-1){
road_to_vertex[now][1].push_back(how_to_go);
}else if(t==1){
road_to_vertex[now][2].push_back(how_to_go);
}else{
road_to_vertex[now][3].push_back(how_to_go);
}
}else{
for(int i=0;i<4;i++){
int nex=now+d[i];
if(used[nex]==1){//既に通ってたらだめ
continue;
}else{//既に通ってないね
if(obst[nex]==1){//障害物あったらだめ
continue;
}else{
how_to_go.push_back(nex);
used[nex]=1;
serch_road_to_vertex(nex,cnt+1,how_to_go);//大丈夫なのでDFS
how_to_go.pop_back();
used[nex]=0;
}
}
}
}
}
//
int count_each_vertex_SAL(){
int ans=0;
for(int i=0;i<441;i++){
int cnt=0;
if(!road_to_vertex[i][0].empty()){
cnt++;
}
if(!road_to_vertex[i][1].empty()){
cnt++;
}
if(!road_to_vertex[i][2].empty()){
cnt++;
}
if(!road_to_vertex[i][3].empty()){
cnt++;
}
if(cnt<=1){//SALできません
continue;
}else{
int bfrl=0,bfrm=0;//前回重なったところの記録(高速化)
for(int j=0;j<4;j++){//折り返し一歩手前が重ならないように全探索
for(int k=j+1;k<4;k++){//同様
for(int l=0;l<(int)road_to_vertex[i][j].size();l++){//全探索
for(int m=0;m<(int)road_to_vertex[i][k].size();m++){//全探索
bool ok=1;
if(road_to_vertex[i][j][l][bfrl]==road_to_vertex[i][k][m][bfrm]){//前記録したとこ
continue;//だめ
}
for(int n=0;n<scN/2-1;n++){//交差判定
for(int o=n%2;o<scN/2-1;o+=2){//交差判定
if(road_to_vertex[i][j][l][n]==road_to_vertex[i][k][m][o]){//交差判定
ok=0;
bfrl=n;bfrm=o;
break;//だめ
}
}
if(!ok){//だめ
break;
}
}
if(ok){//いいよ
ans++;
}
}
}
}
}
}
}
return ans;
}
//
int main(){
scInput();//入力
read_obstacles();//障害物の座標をbool値で管理
vector<int> s;//次の行の関数に代入するためのモブ(特に意味はない)
serch_road_to_vertex(220,0,s);//各頂点への行き方をDFS
int ans=count_each_vertex_SAL()*2;//SALの数を数えよう逆順もあるよ
scOutput(ans);//出力
return 0;
}