結果

問題 No.360 増加門松列
ユーザー bal4ubal4u
提出日時 2019-05-06 08:57:02
言語 C
(gcc 12.3.0)
結果
AC  
実行時間 1 ms / 2,000 ms
コード長 1,226 bytes
コンパイル時間 250 ms
コンパイル使用メモリ 31,872 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-06-27 02:21:04
合計ジャッジ時間 1,121 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
6,812 KB
testcase_01 AC 1 ms
6,940 KB
testcase_02 AC 1 ms
6,944 KB
testcase_03 AC 1 ms
6,944 KB
testcase_04 AC 1 ms
6,944 KB
testcase_05 AC 1 ms
6,940 KB
testcase_06 AC 1 ms
6,940 KB
testcase_07 AC 1 ms
6,940 KB
testcase_08 AC 1 ms
6,940 KB
testcase_09 AC 1 ms
6,940 KB
testcase_10 AC 1 ms
6,940 KB
testcase_11 AC 1 ms
6,940 KB
testcase_12 AC 1 ms
6,940 KB
testcase_13 AC 1 ms
6,944 KB
testcase_14 AC 1 ms
6,944 KB
testcase_15 AC 1 ms
6,944 KB
testcase_16 AC 1 ms
6,944 KB
testcase_17 AC 1 ms
6,944 KB
testcase_18 AC 1 ms
6,940 KB
testcase_19 AC 1 ms
6,940 KB
testcase_20 AC 1 ms
6,944 KB
testcase_21 AC 1 ms
6,944 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

// yukicoder: No.360 増加門松列
// 2019.5.6 bal4u

#include <stdio.h>
#include <stdlib.h>

int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; }

/* 2^16までのビット数を数える */
int bitcount(int x)
{
	x = ((x & 0xAAAAAA) >>  1) + (x & 0x555555);
	x = ((x & 0xCCCCCC) >>  2) + (x & 0x333333);
	x = ((x & 0xF0F0F0) >>  4) + (x & 0x0F0F0F);
	x = ((x & 0x00FF00) >>  8) + (x & 0xFF00FF);
	return x;
}

int check(int *a, int b0, int b1, int b2) {
	return (b0 < a[0] || b0 > a[1]) && (b1 < a[1] || b1 > a[2]) &&
		   (b2 < a[2] || b2 > a[3]) && b0 < b1 && b1 < b2;
}

int main()
{
	int i, j, ai, bi;
	int d[7], a[4], b[3];
	
	for (i = 0; i < 7; i++) scanf("%d", d+i);
	qsort(d, 7, sizeof(int), cmp);
	
	for (i = 1; i < 128; i++) {
		if (bitcount(i) != 4) continue;
		ai = bi = 0; for (j = 0; j < 7; j++) {
			if ((i >> j) & 1) a[ai++] = d[j];
			else b[bi++] = d[j];
		}
		if (a[0] < a[1] && a[1] < a[2] && a[2] < a[3]) {
			if (check(a, b[0], b[1], b[2]) ||
				check(a, b[0], b[2], b[1]) ||
				check(a, b[1], b[0], b[2]) ||
				check(a, b[1], b[2], b[0]) ||
				check(a, b[2], b[0], b[1]) ||
				check(a, b[2], b[1], b[0])) goto OK;
		}
	}
	puts("NO");
	return 0;
OK:	puts("YES");
	return 0;
}
0