結果

提出番号 1270
提出者 Nafmo
言語 C++
提出日時 2018-06-20 21:19:11
問題名 (62)SuperCon2018(独自テスト)
結果 AC
点数 3073000

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 470000 476ms 8016KB
2 AC 470000 474ms 7936KB
3 AC 430000 439ms 7920KB
4 AC 460000 472ms 8416KB
5 AC 460000 471ms 7504KB
6 AC 400000 405ms 7936KB
7 AC 360000 370ms 7952KB
8 AC 480000 488ms 7296KB
9 AC 470000 479ms 8416KB
10 AC 440000 452ms 7536KB
テストケース 結果 得点 実行時間 メモリ使用量
11 AC 300000 306ms 7920KB
12 AC 470000 474ms 8000KB
13 AC 230000 237ms 7632KB
14 AC 350000 358ms 8336KB
15 AC 460000 462ms 8416KB
16 AC 460000 472ms 7952KB
17 AC 360000 362ms 8400KB
18 AC 470000 479ms 7248KB
19 AC 470000 479ms 8368KB
20 AC 320000 332ms 8384KB
テストケース 結果 得点 実行時間 メモリ使用量
21 AC 400000 403ms 8272KB
22 AC 340000 346ms 8512KB
23 AC 160000 168ms 7232KB
24 AC 300000 308ms 8672KB
25 AC 400000 414ms 7920KB
26 AC 380000 389ms 8128KB
27 AC 460000 466ms 8000KB
28 AC 320000 331ms 7824KB
29 AC 290000 300ms 7936KB
30 AC 430000 438ms 8400KB
テストケース 結果 得点 実行時間 メモリ使用量
31 AC 160000 171ms 7968KB
32 AC 410000 420ms 8656KB
33 AC 370000 381ms 8688KB
34 AC 230000 237ms 8384KB
35 AC 310000 314ms 7632KB
36 AC 400000 404ms 8176KB
37 AC 390000 399ms 8432KB
38 AC 380000 392ms 8448KB
39 AC 360000 366ms 8400KB
40 AC 460000 464ms 8384KB
テストケース 結果 得点 実行時間 メモリ使用量
41 AC 420000 432ms 8080KB
42 AC 240000 246ms 8432KB
43 AC 330000 336ms 8384KB
44 AC 280000 287ms 8112KB
45 AC 270000 274ms 8304KB
46 AC 180000 191ms 7504KB
47 AC 370000 377ms 8448KB
48 AC 290000 300ms 7216KB
49 AC 220000 231ms 7792KB
50 AC 140000 153ms 8064KB
テストケース 結果 得点 実行時間 メモリ使用量
51 AC 110000 116ms 7952KB
52 AC 360000 369ms 8112KB
53 AC 390000 397ms 8400KB
54 AC 260000 262ms 8272KB
55 AC 320000 332ms 8416KB
56 AC 340000 346ms 7952KB
57 AC 290000 295ms 8064KB
58 AC 260000 268ms 7520KB
59 AC 170000 178ms 8400KB
60 AC 400000 403ms 8432KB
テストケース 結果 得点 実行時間 メモリ使用量
61 AC 170000 174ms 8704KB
62 AC 320000 324ms 7824KB
63 AC 430000 440ms 8336KB
64 AC 190000 195ms 7888KB
65 AC 230000 237ms 7936KB
66 AC 230000 236ms 8400KB
67 AC 250000 258ms 7632KB
68 AC 140000 152ms 8272KB
69 AC 130000 137ms 8432KB
70 AC 380000 390ms 8400KB
テストケース 結果 得点 実行時間 メモリ使用量
71 AC 70000 79ms 8192KB
72 AC 400000 411ms 8112KB
73 AC 400000 406ms 8672KB
74 AC 310000 318ms 7248KB
75 AC 130000 134ms 8432KB
76 AC 120000 122ms 8400KB
77 AC 240000 242ms 7920KB
78 AC 220000 224ms 7968KB
79 AC 230000 237ms 8416KB
80 AC 340000 342ms 8704KB
テストケース 結果 得点 実行時間 メモリ使用量
81 AC 240000 248ms 8240KB
82 AC 210000 214ms 8432KB
83 AC 280000 286ms 7984KB
84 AC 230000 235ms 7952KB
85 AC 280000 291ms 7920KB
86 AC 210000 218ms 8400KB
87 AC 230000 240ms 8192KB
88 AC 280000 290ms 8064KB
89 AC 150000 153ms 8464KB
90 AC 300000 312ms 7824KB
テストケース 結果 得点 実行時間 メモリ使用量
91 AC 240000 246ms 8688KB
92 AC 240000 252ms 7632KB
93 AC 330000 336ms 8368KB
94 AC 190000 196ms 7808KB
95 AC 150000 157ms 7632KB
96 AC 450000 461ms 8416KB
97 AC 270000 280ms 8432KB
98 AC 80000 82ms 8384KB
99 AC 350000 357ms 8384KB
100 AC 260000 271ms 8672KB

ソースコード

#include<stdio.h>
#include<cmath>
#include<algorithm>
#include<time.h>
int scN,scM;
int scB[2][10];
clock_t scStartTime,scEndTime;
void scInput(){
	int i;
	scanf("%d%d",&scN,&scM);
	for(i=0;i<scM;++i){scanf("%d%d",&scB[0][i],&scB[1][i]);}
	scStartTime=clock();
}
void scOutput(int s){
	scEndTime=clock();
	printf("Ans= %d, time=%d\n",s,(int)(scEndTime-scStartTime));
}
using namespace std;
//ans:答え F:訪問済チェック v:方向要素保存 dx,dy:移動方向差分
int ans;
bool F[50][50];
int v[5],dx[4],dy[4];
// x座標 y座標 回数 方向
inline void DFS(int x,int y,int d,int dr){
	if(d == scN){
		//左右と上下に動いた回数が同じであるかと
		//N回進んだときにスタート地点に戻ることを確認する
		if(v[0] != v[2] || v[1] != v[3])return;
		if(x == 0 && y == 0)++ans;
		return;
	}
	//今いる地点から残りの移動回数で戻れなければ枝刈り。
	if(abs(x)+abs(y)>scN-d)return;
	//移動方向 右:0 上:1 左:2 下:3
	for(int i=0;i!=4;++i){
		//一個前の座標の位置に動くのを防ぐ
		if(dr == i)continue;
		//一度通ったマスでなければ再帰する。
		if(!F[x + dx[i] + 20][y + dy[i] + 20]){
			F[x + dx[i] + 20][y + dy[i] + 20] = true;
			++v[i];
			//進んだ方向と逆には進めないためそれを渡して再帰する
			int a=(i+2)%4;
			DFS(x + dx[i],y + dy[i],d + 1,a);
			--v[i]; F[x + dx[i] + 20][y + dy[i] + 20] = false;
		}
	}
}

int main(){
	scInput();
	//scInput() より前に実行してはいけないため(初期化も不可)
	v[0]=v[1]=v[2]=v[3]=0;
	dx[0]=1,dx[1]=0,dx[2]=-1,dx[3]=0;
	dy[0]=0,dy[1]=-1,dy[2]=0,dy[3]=1;
	for (int i=0;i!=scM;++i)F[scB[0][i]+20][scB[1][i]+20] = true;
	if(!F[20][20])DFS(0,0,0,-1);
	scOutput(ans);
	return 0;
}