結果

提出番号 1301
提出者 tatyam
言語 C++
提出日時 2018-06-20 22:23:18
問題名 (62)SuperCon2018(独自テスト)
結果 AC
点数 1219000

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 170000 179ms 7920KB
2 AC 170000 176ms 8672KB
3 AC 180000 189ms 8384KB
4 AC 190000 195ms 7600KB
5 AC 180000 192ms 7824KB
6 AC 160000 165ms 8192KB
7 AC 140000 148ms 8288KB
8 AC 190000 195ms 8400KB
9 AC 190000 197ms 8384KB
10 AC 160000 168ms 8480KB
テストケース 結果 得点 実行時間 メモリ使用量
11 AC 130000 135ms 8400KB
12 AC 190000 194ms 8016KB
13 AC 90000 97ms 7920KB
14 AC 140000 142ms 8416KB
15 AC 180000 188ms 7984KB
16 AC 180000 193ms 7216KB
17 AC 140000 148ms 7632KB
18 AC 170000 180ms 8288KB
19 AC 190000 195ms 8080KB
20 AC 120000 129ms 7504KB
テストケース 結果 得点 実行時間 メモリ使用量
21 AC 150000 160ms 8704KB
22 AC 140000 151ms 8400KB
23 AC 80000 89ms 7920KB
24 AC 120000 133ms 7968KB
25 AC 140000 153ms 8384KB
26 AC 150000 155ms 8416KB
27 AC 180000 188ms 7248KB
28 AC 130000 136ms 8384KB
29 AC 100000 110ms 8304KB
30 AC 180000 192ms 8432KB
テストケース 結果 得点 実行時間 メモリ使用量
31 AC 80000 84ms 8400KB
32 AC 180000 182ms 8144KB
33 AC 140000 151ms 8560KB
34 AC 90000 100ms 8016KB
35 AC 100000 112ms 7872KB
36 AC 160000 163ms 8400KB
37 AC 150000 161ms 8400KB
38 AC 150000 155ms 7984KB
39 AC 130000 136ms 8064KB
40 AC 180000 186ms 7984KB
テストケース 結果 得点 実行時間 メモリ使用量
41 AC 180000 188ms 8416KB
42 AC 90000 98ms 8432KB
43 AC 130000 135ms 7520KB
44 AC 110000 117ms 8432KB
45 AC 110000 120ms 8400KB
46 AC 70000 81ms 7760KB
47 AC 130000 139ms 8352KB
48 AC 110000 118ms 8400KB
49 AC 100000 104ms 7840KB
50 AC 60000 65ms 8192KB
テストケース 結果 得点 実行時間 メモリ使用量
51 AC 50000 58ms 8400KB
52 AC 140000 146ms 8256KB
53 AC 150000 159ms 8384KB
54 AC 100000 113ms 7600KB
55 AC 120000 121ms 8288KB
56 AC 130000 139ms 7984KB
57 AC 110000 117ms 8016KB
58 AC 100000 105ms 8416KB
59 AC 70000 81ms 8336KB
60 AC 140000 149ms 8688KB
テストケース 結果 得点 実行時間 メモリ使用量
61 AC 90000 95ms 8416KB
62 AC 110000 119ms 8720KB
63 AC 170000 175ms 8176KB
64 AC 90000 95ms 8224KB
65 AC 80000 92ms 7776KB
66 AC 90000 95ms 8384KB
67 AC 100000 101ms 8480KB
68 AC 60000 72ms 8416KB
69 AC 60000 68ms 8416KB
70 AC 140000 152ms 7984KB
テストケース 結果 得点 実行時間 メモリ使用量
71 AC 30000 41ms 7520KB
72 AC 160000 165ms 7552KB
73 AC 170000 177ms 8000KB
74 AC 120000 128ms 8176KB
75 AC 50000 61ms 7504KB
76 AC 40000 52ms 8720KB
77 AC 100000 102ms 8448KB
78 AC 80000 81ms 8672KB
79 AC 90000 95ms 7632KB
80 AC 130000 134ms 8592KB
テストケース 結果 得点 実行時間 メモリ使用量
81 AC 90000 95ms 8688KB
82 AC 90000 94ms 8432KB
83 AC 100000 113ms 7936KB
84 AC 90000 94ms 8384KB
85 AC 120000 125ms 7536KB
86 AC 70000 80ms 8640KB
87 AC 100000 102ms 8400KB
88 AC 110000 116ms 7968KB
89 AC 50000 61ms 8720KB
90 AC 110000 121ms 7504KB
テストケース 結果 得点 実行時間 メモリ使用量
91 AC 100000 107ms 8400KB
92 AC 100000 103ms 8176KB
93 AC 130000 136ms 8416KB
94 AC 80000 86ms 8016KB
95 AC 60000 69ms 8720KB
96 AC 180000 187ms 8064KB
97 AC 110000 115ms 8432KB
98 AC 40000 43ms 7248KB
99 AC 150000 154ms 7824KB
100 AC 110000 115ms 8176KB

ソースコード

#include<stdio.h>
#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));
}
#include <cstdlib>
using namespace std;

int block[23][23];

int left(int, int, int);
int right(int, int, int);
int down(int, int, int);
int up(int, int, int);

int count(int move, int x, int y){
    int cnt = 0;
    if(!block[11 + x + 1][11 + y    ]) cnt += right(move - 1, x + 1, y    );
    if(!block[11 + x    ][11 + y + 1]) cnt += up   (move - 1, x    , y + 1);
    if(!block[11 + x - 1][11 + y    ]) cnt += left (move - 1, x - 1, y    );
    if(!block[11 + x    ][11 + y - 1]) cnt += down (move - 1, x    , y - 1);
    return cnt;
}

int left(int move, int x, int y){
    if(!x && !y) return move ? 0 : 1;
    int cnt = 0;
    block[11 + x][11 + y] = 1;
    if(!block[11 + x    ][11 + y + 1] && abs(x    ) + abs(y + 1) < move) cnt += up   (move - 1, x    , y + 1);
    if(!block[11 + x - 1][11 + y    ] && abs(x - 1) + abs(y    ) < move) cnt += left (move - 1, x - 1, y    );
    if(!block[11 + x    ][11 + y - 1] && abs(x    ) + abs(y - 1) < move) cnt += down (move - 1, x    , y - 1);
    block[11 + x][11 + y] = 0;
    return cnt;
}

int right(int move, int x, int y){
    if(!x && !y) return move ? 0 : 1;
    int cnt = 0;
    block[11 + x][11 + y] = 1;
    if(!block[11 + x + 1][11 + y    ] && abs(x + 1) + abs(y    ) < move) cnt += right(move - 1, x + 1, y    );
    if(!block[11 + x    ][11 + y + 1] && abs(x    ) + abs(y + 1) < move) cnt += up   (move - 1, x    , y + 1);
    if(!block[11 + x    ][11 + y - 1] && abs(x    ) + abs(y - 1) < move) cnt += down (move - 1, x    , y - 1);
    block[11 + x][11 + y] = 0;
    return cnt;
}

int down(int move, int x, int y){
    if(!x && !y) return move ? 0 : 1;
    int cnt = 0;
    block[11 + x][11 + y] = 1;
    if(!block[11 + x + 1][11 + y    ] && abs(x + 1) + abs(y    ) < move) cnt += right(move - 1, x + 1, y    );
    if(!block[11 + x - 1][11 + y    ] && abs(x - 1) + abs(y    ) < move) cnt += left (move - 1, x - 1, y    );
    if(!block[11 + x    ][11 + y - 1] && abs(x    ) + abs(y - 1) < move) cnt += down (move - 1, x    , y - 1);
    block[11 + x][11 + y] = 0;
    return cnt;
}

int up(int move, int x, int y){
    if(!x && !y) return move ? 0 : 1;
    int cnt = 0;
    block[11 + x][11 + y] = 1;
    if(!block[11 + x + 1][11 + y    ] && abs(x + 1) + abs(y    ) < move) cnt += right(move - 1, x + 1, y    );
    if(!block[11 + x    ][11 + y + 1] && abs(x    ) + abs(y + 1) < move) cnt += up   (move - 1, x    , y + 1);
    if(!block[11 + x - 1][11 + y    ] && abs(x - 1) + abs(y    ) < move) cnt += left (move - 1, x - 1, y    );
    block[11 + x][11 + y] = 0;
    return cnt;
}

int main(){
    scInput();
    for(int i = 0;i < scM;i++) if(abs(scB[0][i]) + abs(scB[1][i]) <= 11) block[11 + scB[0][i]][11 + scB[1][i]] = 1;
    scOutput(count(scN, 0, 0));
    return 0;
}