結果

提出番号 1313
提出者 callsnote
言語 C++
提出日時 2018-06-21 12:49:00
問題名 (62)SuperCon2018(独自テスト)
結果 AC
点数 570000

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 90000 101ms 23632KB
2 AC 90000 99ms 22928KB
3 AC 80000 84ms 22512KB
4 AC 90000 99ms 22928KB
5 AC 90000 98ms 22288KB
6 AC 80000 86ms 20816KB
7 AC 70000 81ms 20816KB
8 AC 90000 100ms 23376KB
9 AC 90000 100ms 22752KB
10 AC 80000 83ms 21872KB
テストケース 結果 得点 実行時間 メモリ使用量
11 AC 50000 59ms 18704KB
12 AC 90000 99ms 22928KB
13 AC 50000 54ms 16976KB
14 AC 60000 69ms 20816KB
15 AC 80000 84ms 21872KB
16 AC 90000 99ms 22928KB
17 AC 70000 79ms 21024KB
18 AC 80000 88ms 23008KB
19 AC 80000 87ms 22928KB
20 AC 60000 73ms 19760KB
テストケース 結果 得点 実行時間 メモリ使用量
21 AC 80000 89ms 20816KB
22 AC 70000 78ms 20144KB
23 AC 30000 37ms 14480KB
24 AC 60000 62ms 19136KB
25 AC 80000 86ms 20816KB
26 AC 70000 81ms 20816KB
27 AC 90000 97ms 21872KB
28 AC 60000 72ms 19760KB
29 AC 60000 67ms 17648KB
30 AC 90000 98ms 22928KB
テストケース 結果 得点 実行時間 メモリ使用量
31 AC 30000 40ms 15536KB
32 AC 80000 93ms 22544KB
33 AC 70000 74ms 20816KB
34 AC 40000 50ms 16592KB
35 AC 60000 65ms 18704KB
36 AC 80000 84ms 20672KB
37 AC 60000 70ms 20816KB
38 AC 70000 79ms 20320KB
39 AC 70000 80ms 19760KB
40 AC 80000 86ms 21872KB
テストケース 結果 得点 実行時間 メモリ使用量
41 AC 80000 97ms 22832KB
42 AC 40000 55ms 16944KB
43 AC 60000 71ms 18704KB
44 AC 50000 54ms 17536KB
45 AC 50000 57ms 18320KB
46 AC 30000 40ms 15840KB
47 AC 70000 78ms 19760KB
48 AC 50000 56ms 17648KB
49 AC 50000 54ms 16592KB
50 AC 30000 37ms 14208KB
テストケース 結果 得点 実行時間 メモリ使用量
51 AC 20000 27ms 13424KB
52 AC 80000 82ms 20832KB
53 AC 60000 70ms 19760KB
54 AC 60000 62ms 16592KB
55 AC 60000 71ms 19344KB
56 AC 60000 72ms 18912KB
57 AC 40000 53ms 17952KB
58 AC 40000 48ms 16480KB
59 AC 30000 41ms 15008KB
60 AC 60000 73ms 20816KB
テストケース 結果 得点 実行時間 メモリ使用量
61 AC 40000 44ms 14480KB
62 AC 60000 71ms 17648KB
63 AC 80000 89ms 20816KB
64 AC 30000 38ms 15536KB
65 AC 40000 52ms 16368KB
66 AC 40000 53ms 16592KB
67 AC 40000 55ms 16592KB
68 AC 30000 35ms 14240KB
69 AC 20000 30ms 13488KB
70 AC 70000 80ms 19888KB
テストケース 結果 得点 実行時間 メモリ使用量
71 AC 10000 19ms 10256KB
72 AC 70000 83ms 20176KB
73 AC 80000 90ms 21872KB
74 AC 60000 71ms 19040KB
75 AC 20000 23ms 12928KB
76 AC 20000 31ms 12976KB
77 AC 40000 50ms 15536KB
78 AC 40000 52ms 16560KB
79 AC 50000 54ms 17616KB
80 AC 70000 74ms 18704KB
テストケース 結果 得点 実行時間 メモリ使用量
81 AC 50000 57ms 16672KB
82 AC 30000 42ms 16592KB
83 AC 50000 54ms 17264KB
84 AC 40000 50ms 16176KB
85 AC 50000 58ms 18704KB
86 AC 40000 42ms 15536KB
87 AC 40000 51ms 15536KB
88 AC 60000 65ms 17648KB
89 AC 20000 32ms 15024KB
90 AC 50000 61ms 16592KB
テストケース 結果 得点 実行時間 メモリ使用量
91 AC 50000 56ms 16720KB
92 AC 50000 56ms 16592KB
93 AC 60000 70ms 18208KB
94 AC 40000 46ms 14480KB
95 AC 20000 27ms 13936KB
96 AC 80000 95ms 21872KB
97 AC 50000 61ms 17648KB
98 AC 10000 16ms 11168KB
99 AC 70000 79ms 19760KB
100 AC 60000 62ms 16592KB

ソースコード


#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));
}
// sc1.h

typedef long long ll;
#define rep(i, n) for (int i = 0; i < (n); i++)

//
// Implementation
//

#include <stdlib.h>
#include <vector>
using namespace std;

#define MAX_N 20

bool path[MAX_N*2][MAX_N*2];
bool trap[MAX_N*2][MAX_N*2];

struct Point {
  int x;
  int y;
};
struct Route {
  Point p[10];
};

vector<Route> routemap[MAX_N*2][MAX_N*2];

void collect_routes(int x, int y, int len, Route route) {
  if (abs((x-scN)*(x-scN))+abs((y-scN)*(y-scN)) > (scN-len)*(scN-len)) return;
  if (path[y][x]) return;
  if (trap[y][x]) return;
  if (len == scN/2) {
    routemap[y][x].push_back(route);
    return;
  }

  path[y][x] = true;
  route.p[len] = (Point){x, y};
  collect_routes(x+1, y, len+1, route);
  collect_routes(x-1, y, len+1, route);
  collect_routes(x, y+1, len+1, route);
  collect_routes(x, y-1, len+1, route);
  path[y][x] = false;
}

bool is_duplicate(bool visited[MAX_N*2][MAX_N*2], Route b) {
  for (int i=1; i<scN/2; i++) {
    if (visited[b.p[i].y][b.p[i].x]) return true;
  }
  return false;
}

int combine_routes() {
  int acc = 0;
  for (int y=scN/2; y<=scN+scN/2; y++) {
    for (int x=scN/2; x<=scN+scN/2; x++) {
      vector<Route> routes = routemap[y][x];
      rep(i, routes.size()) {
        bool visited[MAX_N*2][MAX_N*2] = {};
        for (int j=1; j<scN/2; j++) {
          visited[routes[i].p[j].y][routes[i].p[j].x] = true;
        }
        for (int j=i+1; j<routes.size(); j++) {
          if (is_duplicate(visited, routes[j])) continue;
          acc++;
        }
      }
    }
  }
  return acc*2;
}

int main() {
  scInput();

  rep(i, scM) {
    int x = scB[0][i];
    int y = scB[1][i];
    if (x+scN < 0 || y+scN < 0 || x+scN >= MAX_N*2 || y+scN >= MAX_N*2) continue;
    trap[x+scN][y+scN] = true;
  }
  Route route;
  collect_routes(scN, scN, 0, route);
  int acc = combine_routes();
  scOutput(acc);
}