提出 #44919


ソースコード 拡げる

#include <iostream>

#ifdef __DEBUG
#define TRACE(var) std::clog << #var << ':' << ' ' << var << std::endl
#else
#define	TRACE(var)
#endif

struct Vector{
	int x;
	int y;
};

#ifdef __DEBUG
inline std::ostream& operator<<(std::ostream& left, Vector const& right){
	left << '(' << right.x << ',' << ' ' << right.y << ')';
	return left;
}
#endif

inline void simplify(Vector* vec){
	int m = ((*vec).x > 0 ? (*vec).x : -(*vec).x);
	int n = ((*vec).y > 0 ? (*vec).y : -(*vec).y);
	if(m < n){
		std::swap(m, n);
	}
	TRACE(m);
	TRACE(n);
	while(n != 0){
		int tmp = n;
		n = m % n;
		m = tmp;
	}
	(*vec).x /= m;
	(*vec).y /= m;
}

inline Vector direction_vector(Vector const& p1, Vector const& p2){
	Vector res = {p2.x - p1.x, p2.y - p1.y};
	simplify(&res);
	return res;
}

inline void vec_insert(int const& i, Vector* vec, Vector const& val){
	int idx = -1;
	while(++idx < i){
		if(vec[idx].x > val.x || (vec[idx].x == val.x && vec[idx].y > val.y)){
			int t = i;
			do{
				vec[t] = vec[t - 1];
				t--;
			}while(t > idx);
			break;
		}
	}
	vec[idx] = val;
}

inline void find(unsigned long long int& res, bool panel[100][100], Vector const& a, Vector const& b, Vector const& ab){
	Vector current;
	Vector increm;
	if(ab.x > 0 || (ab.x == 0 && ab.y > 0)){
		current = b;
		increm = ab;
	}else{
		current = a;
		increm.x = -ab.x;
		increm.y = -ab.y;
	}
	TRACE(increm);
	do{
		TRACE(current);
		current.x += increm.x;
		current.y += increm.y;
		if(current.x >= 100  || current.y < 0 || current.x < 0 || current.y >= 100){
			break;
		}
		if(panel[current.x][current.y]){
			res--;
			TRACE(res);
		}
	}while(true);
}

int main(void){
	int n;
	unsigned long long int res = 0;
	Vector vec[10000];
	bool panel[100][100];
	for(int i = 0; i < 100; i++){
		for(int j = 0; j < 100; j++){
			panel[i][j] = false;
		}
	}

	std::cin >> n;

	for(int i = 0; i < n; i++){
		Vector tmp;
		std::cin >> tmp.x >> tmp.y;
		panel[tmp.x][tmp.y] = true;
		vec_insert(i, vec, tmp);
	}

#ifdef __DEBUG
	for(int i = 0; i < n; i++){
		std::cout << '(' << vec[i].x << ',' << ' ' << vec[i].y << ')' << ',' << ' ';
	}
	std::cout << std::endl;
	system("pause");
	std::cout << std::endl;
	for(int i = 0; i < 100; i++){
		for(int j = 0; j < 100; j++){
			std::cout << (panel[i][j] ? '*' : '+');
		}
		std::cout << std::endl;
	}
	system("pause");
#endif
	
	for(int i = 0; i < n - 3; i++){
		TRACE(i);
		for(int j = i + 1; j < n - 2; j++){
			TRACE(j);
			Vector ij = direction_vector(vec[i], vec[j]);
			TRACE(ij);
			for(int k = j + 1; k < n - 1; k++){
				TRACE(k);
				Vector ik = direction_vector(vec[i], vec[k]);
				TRACE(ik);
				if(ij.x == ik.x && ij.y == ik.y || ij.x == -ik.x && ij.y == -ik.y){
					continue;
				}
				Vector jk = direction_vector(vec[j], vec[k]);
				TRACE(jk);
				res += n - k - 1;
				find(res, panel, vec[i], vec[j], ij);
				find(res, panel, vec[i], vec[k], ik);
				find(res, panel, vec[j], vec[k], jk);
			}
		}
	}

	std::cout << res % 1000000007 << std::endl;

#ifdef __DEBUG
	system("pause");
#endif

	return 0;
}

提出情報

提出日時
問題 B - よんてん
ユーザ Kt_Sz
言語 C++ (G++ 4.6.4)
得点 4
コード長 3164 Byte
結果 WA
実行時間 2035 ms
メモリ 916 KiB

ジャッジ結果

セット名 level1 level2 level3 level4
得点 / 配点 4 / 4 0 / 16 0 / 30 0 / 50
結果
AC × 8
AC × 9
WA × 24
AC × 9
WA × 28
TLE × 17
RE × 1
AC × 9
WA × 28
TLE × 36
RE × 5
セット名 テストケース
level1 04/04_input00, 04/04_input01, 04/04_input02, 04/04_input03, 04/04_input04, 04/04_input05, 04/04_input06, 04/04_sample1
level2 04/04_input00, 04/04_input01, 04/04_input02, 04/04_input03, 04/04_input04, 04/04_input05, 04/04_input06, 04/04_sample1, 16/16_input05, 16/16_input06, 16/16_input07, 16/16_input08, 16/16_input09, 16/16_input10, 16/16_input11, 16/16_input12, 16/16_input13, 16/16_input14, 16/16_input15, 16/16_input16, 16/16_input17, 16/16_input18, 16/16_input19, 16/16_input20, 16/16_input21, 16/16_input22, 16/16_input23, 16/16_input24, 16/16_input64, 16/16_input65, 16/16_input66, 16/16_input67, 16/16_sample2
level3 04/04_input00, 04/04_input01, 04/04_input02, 04/04_input03, 04/04_input04, 04/04_input05, 04/04_input06, 04/04_sample1, 16/16_input05, 16/16_input06, 16/16_input07, 16/16_input08, 16/16_input09, 16/16_input10, 16/16_input11, 16/16_input12, 16/16_input13, 16/16_input14, 16/16_input15, 16/16_input16, 16/16_input17, 16/16_input18, 16/16_input19, 16/16_input20, 16/16_input21, 16/16_input22, 16/16_input23, 16/16_input24, 16/16_input64, 16/16_input65, 16/16_input66, 16/16_input67, 16/16_sample2, 30/30_input25, 30/30_input26, 30/30_input27, 30/30_input28, 30/30_input29, 30/30_input30, 30/30_input31, 30/30_input32, 30/30_input33, 30/30_input34, 30/30_input35, 30/30_input36, 30/30_input37, 30/30_input38, 30/30_input39, 30/30_input40, 30/30_input41, 30/30_input42, 30/30_input43, 30/30_input44, 30/30_input68, 30/30_input69
level4 04/04_input00, 04/04_input01, 04/04_input02, 04/04_input03, 04/04_input04, 04/04_input05, 04/04_input06, 04/04_sample1, 16/16_input05, 16/16_input06, 16/16_input07, 16/16_input08, 16/16_input09, 16/16_input10, 16/16_input11, 16/16_input12, 16/16_input13, 16/16_input14, 16/16_input15, 16/16_input16, 16/16_input17, 16/16_input18, 16/16_input19, 16/16_input20, 16/16_input21, 16/16_input22, 16/16_input23, 16/16_input24, 16/16_input64, 16/16_input65, 16/16_input66, 16/16_input67, 16/16_sample2, 30/30_input25, 30/30_input26, 30/30_input27, 30/30_input28, 30/30_input29, 30/30_input30, 30/30_input31, 30/30_input32, 30/30_input33, 30/30_input34, 30/30_input35, 30/30_input36, 30/30_input37, 30/30_input38, 30/30_input39, 30/30_input40, 30/30_input41, 30/30_input42, 30/30_input43, 30/30_input44, 30/30_input68, 30/30_input69, 50/50_input45, 50/50_input46, 50/50_input47, 50/50_input48, 50/50_input49, 50/50_input50, 50/50_input51, 50/50_input52, 50/50_input53, 50/50_input54, 50/50_input55, 50/50_input56, 50/50_input57, 50/50_input58, 50/50_input59, 50/50_input60, 50/50_input61, 50/50_input62, 50/50_input63, 50/50_input70, 50/50_input71, 50/50_input72, 50/50_input73
ケース名 結果 実行時間 メモリ
04/04_input00 AC 20 ms 788 KiB
04/04_input01 AC 21 ms 796 KiB
04/04_input02 AC 22 ms 732 KiB
04/04_input03 AC 21 ms 784 KiB
04/04_input04 AC 20 ms 784 KiB
04/04_input05 AC 22 ms 792 KiB
04/04_input06 AC 22 ms 784 KiB
04/04_sample1 AC 21 ms 792 KiB
16/16_input05 WA 41 ms 788 KiB
16/16_input06 WA 70 ms 788 KiB
16/16_input07 WA 45 ms 780 KiB
16/16_input08 WA 22 ms 788 KiB
16/16_input09 WA 21 ms 824 KiB
16/16_input10 WA 21 ms 752 KiB
16/16_input11 WA 53 ms 784 KiB
16/16_input12 WA 25 ms 780 KiB
16/16_input13 WA 22 ms 796 KiB
16/16_input14 WA 30 ms 788 KiB
16/16_input15 WA 22 ms 764 KiB
16/16_input16 WA 23 ms 784 KiB
16/16_input17 WA 26 ms 788 KiB
16/16_input18 WA 37 ms 800 KiB
16/16_input19 AC 21 ms 788 KiB
16/16_input20 WA 33 ms 736 KiB
16/16_input21 WA 32 ms 788 KiB
16/16_input22 WA 22 ms 736 KiB
16/16_input23 WA 22 ms 792 KiB
16/16_input24 WA 23 ms 796 KiB
16/16_input64 WA 22 ms 788 KiB
16/16_input65 WA 21 ms 796 KiB
16/16_input66 WA 22 ms 764 KiB
16/16_input67 WA 76 ms 792 KiB
16/16_sample2 WA 21 ms 816 KiB
30/30_input25 TLE 2030 ms 888 KiB
30/30_input26 TLE 2030 ms 888 KiB
30/30_input27 RE 0 ms 796 KiB
30/30_input28 TLE 2030 ms 892 KiB
30/30_input29 TLE 2030 ms 888 KiB
30/30_input30 TLE 2029 ms 884 KiB
30/30_input31 TLE 2030 ms 896 KiB
30/30_input32 TLE 2003 ms 788 KiB
30/30_input33 WA 1612 ms 780 KiB
30/30_input34 TLE 2029 ms 888 KiB
30/30_input35 TLE 2028 ms 884 KiB
30/30_input36 WA 80 ms 792 KiB
30/30_input37 TLE 2029 ms 884 KiB
30/30_input38 TLE 2030 ms 896 KiB
30/30_input39 TLE 2035 ms 900 KiB
30/30_input40 WA 388 ms 760 KiB
30/30_input41 WA 1216 ms 796 KiB
30/30_input42 TLE 2032 ms 888 KiB
30/30_input43 TLE 2029 ms 880 KiB
30/30_input44 TLE 2029 ms 892 KiB
30/30_input68 TLE 2030 ms 892 KiB
30/30_input69 TLE 2030 ms 884 KiB
50/50_input45 TLE 2030 ms 900 KiB
50/50_input46 TLE 2029 ms 896 KiB
50/50_input47 TLE 2029 ms 896 KiB
50/50_input48 RE 0 ms 888 KiB
50/50_input49 TLE 2030 ms 888 KiB
50/50_input50 TLE 2029 ms 884 KiB
50/50_input51 TLE 2029 ms 908 KiB
50/50_input52 TLE 2029 ms 888 KiB
50/50_input53 RE 0 ms 892 KiB
50/50_input54 TLE 2030 ms 892 KiB
50/50_input55 TLE 2029 ms 892 KiB
50/50_input56 TLE 2029 ms 888 KiB
50/50_input57 TLE 2031 ms 888 KiB
50/50_input58 RE 0 ms 892 KiB
50/50_input59 TLE 2030 ms 888 KiB
50/50_input60 TLE 2030 ms 888 KiB
50/50_input61 TLE 2030 ms 904 KiB
50/50_input62 TLE 2030 ms 892 KiB
50/50_input63 RE 0 ms 888 KiB
50/50_input70 TLE 2030 ms 804 KiB
50/50_input71 TLE 2029 ms 916 KiB
50/50_input72 TLE 2030 ms 888 KiB
50/50_input73 TLE 2030 ms 888 KiB