提出 #1204555


ソースコード 拡げる

#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;

static const int NMAX = 200000;
static const int MMAX = 18;

static int N, M, X[NMAX];
static int A[1 << (1 + MMAX)];
static int B[1 << (1 + MMAX)];
static int Y[NMAX + 1][1 + MMAX];

static void solve(int *C) {
	for(int m = 0; m <= M; m++) Y[N][m] = N;
	for(int i = N; --i > 0; ) {
		for(int m = 0; m <= M; m++) Y[i][m] = (m < X[i] ? i : Y[i + 1][m]);
	}
	for(int mask = 1; mask < (1 << (1 + M)); mask++) {
		int ret = 0;
		for(int i = 0; i <= M; i++) {
			if((mask & (1 << i)) == 0) continue;
			auto tmp = C[mask ^ (1 << i)];
			if(tmp == N) {
				ret = N;
				break;
			}
			tmp = Y[tmp + 1][i];
			if(tmp > ret) {
				ret = tmp;
				if(ret == N) break;
			}
		}
		C[mask] = ret;
	}
}

int main() {
	scanf("%d%d", &N, &M);
	for(int i = 0; i < N; i++) scanf("%d", X + i);

	{
		vector<int> v;
		for(; ; M >>= 1) {
			v.push_back(M);
			if(M == 0) break;
		}
		M = v.size() - 1;
		reverse(begin(v), end(v));
		for(int i = N; --i > 0; ) {
			X[i] = lower_bound(begin(v), end(v), X[i] - X[i - 1]) - begin(v);
		}
	}

	solve(A);
	if(A[(1 << (1 + M)) - 1] != N) {
		for(int i = 0; i < N; i++) puts("Impossible");
	} else {
		vector<int> v;
		for(int i = 0; i < N; ) {
			auto j = Y[i + 1][M];
			v.push_back(j - i);
			i = j;
		}
		reverse(X + 1, X + N);
		solve(B);
		int l = 0;
		for(auto s : v) {
			auto z = false;
			for(int i = 0; i < (1 << M); i++) {
				if(A[i] < l) continue;
				auto j = ((1 << M) - 1) ^ i;
				if(B[j] >= N - (l + s)) {
					z = true;
					break;
				}
			}
			for(int i = 0; i < s; i++) puts(z ? "Possible" : "Impossible");
			l += s;
		}
	}

	return 0;
}

提出情報

提出日時
問題 E - Camel and Oases
ユーザ arosusti
言語 C++14 (GCC 5.4.1)
得点 1000
コード長 1744 Byte
結果 AC
実行時間 117 ms
メモリ 22144 KiB

コンパイルエラー

./Main.cpp: In function ‘int main()’:
./Main.cpp:39:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &N, &M);
                       ^
./Main.cpp:40:47: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  for(int i = 0; i < N; i++) scanf("%d", X + i);
                                               ^

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 1000 / 1000
結果
AC × 3
AC × 70
セット名 テストケース
Sample 00_example_01.txt, 00_example_02.txt, 00_example_03.txt
All 00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, 42.txt, 43.txt, 44.txt, 45.txt, 46.txt, 47.txt, 48.txt, 49.txt, 50.txt, 51.txt, 52.txt, 53.txt, 54.txt, 55.txt, 56.txt, 57.txt, 58.txt, 59.txt, 60.txt, 61.txt, 62.txt, 63.txt, 64.txt, 65.txt, 66.txt, 67.txt
ケース名 結果 実行時間 メモリ
00_example_01.txt AC 2 ms 4352 KiB
00_example_02.txt AC 2 ms 4352 KiB
00_example_03.txt AC 2 ms 4352 KiB
01.txt AC 77 ms 4864 KiB
02.txt AC 19 ms 4352 KiB
03.txt AC 76 ms 4864 KiB
04.txt AC 19 ms 4352 KiB
05.txt AC 71 ms 4864 KiB
06.txt AC 84 ms 9344 KiB
07.txt AC 23 ms 6016 KiB
08.txt AC 81 ms 6528 KiB
09.txt AC 24 ms 6272 KiB
10.txt AC 73 ms 5760 KiB
11.txt AC 22 ms 4352 KiB
12.txt AC 40 ms 3968 KiB
13.txt AC 75 ms 22144 KiB
14.txt AC 78 ms 4864 KiB
15.txt AC 20 ms 4352 KiB
16.txt AC 78 ms 4864 KiB
17.txt AC 19 ms 4352 KiB
18.txt AC 61 ms 4864 KiB
19.txt AC 17 ms 2304 KiB
20.txt AC 83 ms 7168 KiB
21.txt AC 23 ms 6016 KiB
22.txt AC 42 ms 4864 KiB
23.txt AC 25 ms 6528 KiB
24.txt AC 74 ms 5888 KiB
25.txt AC 40 ms 6144 KiB
26.txt AC 80 ms 6912 KiB
27.txt AC 117 ms 22144 KiB
28.txt AC 43 ms 4992 KiB
29.txt AC 13 ms 3840 KiB
30.txt AC 42 ms 4992 KiB
31.txt AC 39 ms 5760 KiB
32.txt AC 40 ms 3840 KiB
33.txt AC 21 ms 3968 KiB
34.txt AC 41 ms 4480 KiB
35.txt AC 75 ms 22144 KiB
36.txt AC 78 ms 4864 KiB
37.txt AC 10 ms 2304 KiB
38.txt AC 77 ms 4864 KiB
39.txt AC 10 ms 2304 KiB
40.txt AC 73 ms 4864 KiB
41.txt AC 18 ms 2304 KiB
42.txt AC 74 ms 4864 KiB
43.txt AC 17 ms 2304 KiB
44.txt AC 77 ms 4864 KiB
45.txt AC 35 ms 4352 KiB
46.txt AC 23 ms 5760 KiB
47.txt AC 41 ms 4352 KiB
48.txt AC 21 ms 3712 KiB
49.txt AC 78 ms 6400 KiB
50.txt AC 20 ms 3584 KiB
51.txt AC 41 ms 4096 KiB
52.txt AC 20 ms 3584 KiB
53.txt AC 41 ms 4224 KiB
54.txt AC 20 ms 3584 KiB
55.txt AC 41 ms 4480 KiB
56.txt AC 22 ms 5504 KiB
57.txt AC 79 ms 6400 KiB
58.txt AC 40 ms 5888 KiB
59.txt AC 79 ms 5888 KiB
60.txt AC 20 ms 3840 KiB
61.txt AC 41 ms 4352 KiB
62.txt AC 20 ms 3712 KiB
63.txt AC 41 ms 4352 KiB
64.txt AC 20 ms 3840 KiB
65.txt AC 82 ms 6400 KiB
66.txt AC 2 ms 4352 KiB
67.txt AC 2 ms 4352 KiB