시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 256 MB61291951.351%

문제

당신은 웹 서핑을 하고 있었다. 당연히 광고 차단 기능도 없이, 그것도 인터넷 익스플로러로 말이다. 그러던 중 당신은 여러 개의 웹페이지에 올라온 광고 패널들에 재미있는 대회들이 광고된 것을 보게 되었다.

이 대회들은 대부분 간단한 질문에 답하는 형식이다. 예를 들자면 사진에 몇 개의 삼각형이나 정사각형, 직사각형이 있는지, 아니면 3개의 보기 중에서 정답을 고르는 문제 같은 것이다. 이렇게 간단한데도 불구하고 거기에는 좋은 상품들이 많이 걸려 있었다. 그러니 해볼 만 했다.

당첨될 기회를 높이기 위해서, 당신은 문제를 풀어 주는 간단한 프로그램을 만들기로 했다. 당신은 첫 번째 질문인, 사진 속에 몇 개의 정사각형이 있는지에 집중하기로 했고, 문제를 더욱 단순화하기 위해서 입력된 사진들은 선분이 아닌 직선만 포함하고 있으리라고 가정했다.

정의에 대해 좀 더 세밀하게 이야기하자면, 우리는 사진 속의 네 개의 직선 ℓ1, ℓ2, ℓ3, ℓ4들 중에서 ℓ1, ℓ3이 서로 평행하고, 이들이 ℓ2, ℓ4와는 수직이며, ℓ1과 ℓ3 사이의 거리가 ℓ2와 ℓ4 사이의 거리와 같을 때 이것이 정사각형을 이룬다고 말한다.

입력

첫 번째 줄에 사진 속의 직선의 개수를 의미하는 정수 n이 주어진다.  (1 ≤ n ≤ 2,000)

뒤의 n개의 줄에는 직선 각각에 대한 설명이 이어지는데, 직선들은 직선 위의 두 점의 좌표를 통해 주어지며, 구체적으로는 최대 10,000인 네 정수 x1, y1, x2, y2으로 주어진다. 이 직선은 (x1, y1)과 (x2, y2)를 지난다는 것이다.

두 점의 좌표는 다르다고 가정해도 좋다. 그리고 모든 직선은 다르다고 가정해도 좋다.

출력

그림 속의 직선들로 이루어진 정사각형의 개수를 한 개의 정수로 한 줄에 출력하라.

예제 입력 1

10
0 0 1 0
0 1 1 1
0 2 2 2
0 0 0 4
1 -1 1 0
2 -2 2 2
1 1 2 2
1 1 0 2
3 1 2 2
1 3 0 2

예제 출력 1

6
W3sicHJvYmxlbV9pZCI6IjEwMjY3IiwicHJvYmxlbV9sYW5nIjoiMCIsInRpdGxlIjoiXHVjMGFjXHVhYzAxXHVkNjE1XHVjNzQwIFx1YmE4NyBcdWFjMWM/IiwiZGVzY3JpcHRpb24iOiI8cD5cdWIyZjlcdWMyZTBcdWM3NDAgXHVjNmY5IFx1YzExY1x1ZDU1MVx1Yzc0NCBcdWQ1NThcdWFjZTAgXHVjNzg4XHVjNWM4XHViMmU0LiBcdWIyZjlcdWM1ZjBcdWQ3ODggXHVhZDExXHVhY2UwIFx1Y2MyOFx1YjJlOCBcdWFlMzBcdWIyYTVcdWIzYzQgXHVjNWM2XHVjNzc0LCBcdWFkZjhcdWFjODNcdWIzYzQgXHVjNzc4XHVkMTMwXHViMTM3IFx1Yzc3NVx1YzJhNFx1ZDUwY1x1Yjg1Y1x1YjdlY1x1Yjg1YyBcdWI5ZDBcdWM3NzRcdWIyZTQuIFx1YWRmOFx1YjdlY1x1YjM1OCBcdWM5MTEgXHViMmY5XHVjMmUwXHVjNzQwIFx1YzVlY1x1YjdlYyBcdWFjMWNcdWM3NTggXHVjNmY5XHVkMzk4XHVjNzc0XHVjOWMwXHVjNWQwIFx1YzYyY1x1Yjc3Y1x1YzYyOCBcdWFkMTFcdWFjZTAgXHVkMzI4XHViMTEwXHViNGU0XHVjNWQwIFx1YzdhY1x1YmJmOFx1Yzc4OFx1YjI5NCBcdWIzMDBcdWQ2OGNcdWI0ZTRcdWM3NzQgXHVhZDExXHVhY2UwXHViNDFjIFx1YWM4M1x1Yzc0NCBcdWJjZjRcdWFjOGMgXHViNDE4XHVjNWM4XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM3NzQgXHViMzAwXHVkNjhjXHViNGU0XHVjNzQwIFx1YjMwMFx1YmQ4MFx1YmQ4NCBcdWFjMDRcdWIyZThcdWQ1NWMgXHVjOWM4XHViYjM4XHVjNWQwIFx1YjJmNVx1ZDU1OFx1YjI5NCBcdWQ2MTVcdWMyZGRcdWM3NzRcdWIyZTQuIFx1YzYwOFx1Yjk3YyBcdWI0ZTRcdWM3OTBcdWJhNzQgXHVjMGFjXHVjOWM0XHVjNWQwIFx1YmE4NyBcdWFjMWNcdWM3NTggXHVjMGJjXHVhYzAxXHVkNjE1XHVjNzc0XHViMDk4IFx1YzgxNVx1YzBhY1x1YWMwMVx1ZDYxNSwgXHVjOWMxXHVjMGFjXHVhYzAxXHVkNjE1XHVjNzc0IFx1Yzc4OFx1YjI5NFx1YzljMCwgXHVjNTQ0XHViMmM4XHViYTc0IDNcdWFjMWNcdWM3NTggXHViY2Y0XHVhZTMwIFx1YzkxMVx1YzVkMFx1YzExYyBcdWM4MTVcdWIyZjVcdWM3NDQgXHVhY2UwXHViOTc0XHViMjk0IFx1YmIzOFx1YzgxYyBcdWFjMTlcdWM3NDAgXHVhYzgzXHVjNzc0XHViMmU0LiBcdWM3NzRcdWI4MDdcdWFjOGMgXHVhYzA0XHViMmU4XHVkNTVjXHViMzcwXHViM2M0IFx1YmQ4OFx1YWQ2Y1x1ZDU1OFx1YWNlMCBcdWFjNzBcdWFlMzBcdWM1ZDBcdWIyOTQgXHVjODhiXHVjNzQwIFx1YzBjMVx1ZDQ4OFx1YjRlNFx1Yzc3NCBcdWI5Y2VcdWM3NzQgXHVhYzc4XHViODI0IFx1Yzc4OFx1YzVjOFx1YjJlNC4gXHVhZGY4XHViN2VjXHViMmM4IFx1ZDU3NFx1YmNmYyBcdWI5Y2MgXHVkNTg4XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWIyZjlcdWNjYThcdWI0MjAgXHVhZTMwXHVkNjhjXHViOTdjIFx1YjE5Mlx1Yzc3NFx1YWUzMCBcdWM3MDRcdWQ1NzRcdWMxMWMsIFx1YjJmOVx1YzJlMFx1Yzc0MCBcdWJiMzhcdWM4MWNcdWI5N2MgXHVkNDgwXHVjNWI0IFx1YzhmY1x1YjI5NCBcdWFjMDRcdWIyZThcdWQ1NWMgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQ0IFx1YjljY1x1YjRlNFx1YWUzMFx1Yjg1YyBcdWQ1ODhcdWIyZTQuIFx1YjJmOVx1YzJlMFx1Yzc0MCBcdWNjYWIgXHViYzg4XHVjOWY4IFx1YzljOFx1YmIzOFx1Yzc3OCwgXHVjMGFjXHVjOWM0IFx1YzE4ZFx1YzVkMCBcdWJhODcgXHVhYzFjXHVjNzU4IFx1YzgxNVx1YzBhY1x1YWMwMVx1ZDYxNVx1Yzc3NCBcdWM3ODhcdWIyOTRcdWM5YzBcdWM1ZDAgXHVjOWQxXHVjOTExXHVkNTU4XHVhZTMwXHViODVjIFx1ZDU4OFx1YWNlMCwgXHViYjM4XHVjODFjXHViOTdjIFx1YjM1NFx1YzZiMSBcdWIyZThcdWMyMWNcdWQ2NTRcdWQ1NThcdWFlMzAgXHVjNzA0XHVkNTc0XHVjMTFjIFx1Yzc4NVx1YjgyNVx1YjQxYyBcdWMwYWNcdWM5YzRcdWI0ZTRcdWM3NDAgXHVjMTIwXHViZDg0XHVjNzc0IFx1YzU0NFx1YjJjYyBcdWM5YzFcdWMxMjBcdWI5Y2MgXHVkM2VjXHVkNTY4XHVkNTU4XHVhY2UwIFx1Yzc4OFx1YzczY1x1YjlhY1x1Yjc3Y1x1YWNlMCBcdWFjMDBcdWM4MTVcdWQ1ODhcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YzgxNVx1Yzc1OFx1YzVkMCBcdWIzMDBcdWQ1NzQgXHVjODgwIFx1YjM1NCBcdWMxMzhcdWJjMDBcdWQ1NThcdWFjOGMgXHVjNzc0XHVjNTdjXHVhZTMwXHVkNTU4XHVjNzkwXHViYTc0LCBcdWM2YjBcdWI5YWNcdWIyOTQgXHVjMGFjXHVjOWM0IFx1YzE4ZFx1Yzc1OCBcdWIxMjQgXHVhYzFjXHVjNzU4IFx1YzljMVx1YzEyMCBcdTIxMTM8c3ViPjE8XC9zdWI+LCBcdTIxMTM8c3ViPjI8XC9zdWI+LCBcdTIxMTM8c3ViPjM8XC9zdWI+LCBcdTIxMTM8c3ViPjQ8XC9zdWI+XHViNGU0IFx1YzkxMVx1YzVkMFx1YzExYyZuYnNwO1x1MjExMzxzdWI+MTxcL3N1Yj4sJm5ic3A7XHUyMTEzPHN1Yj4zPFwvc3ViPlx1Yzc3NCBcdWMxMWNcdWI4NWMgXHVkM2M5XHVkNTg5XHVkNTU4XHVhY2UwLCBcdWM3NzRcdWI0ZTRcdWM3NzQmbmJzcDtcdTIxMTM8c3ViPjI8XC9zdWI+LCZuYnNwO1x1MjExMzxzdWI+NDxcL3N1Yj5cdWM2NDBcdWIyOTQgXHVjMjE4XHVjOWMxXHVjNzc0XHViYTcwLCZuYnNwO1x1MjExMzxzdWI+MTxcL3N1Yj5cdWFjZmMmbmJzcDtcdTIxMTM8c3ViPjM8XC9zdWI+IFx1YzBhY1x1Yzc3NFx1Yzc1OCBcdWFjNzBcdWI5YWNcdWFjMDAmbmJzcDtcdTIxMTM8c3ViPjI8XC9zdWI+XHVjNjQwJm5ic3A7XHUyMTEzPHN1Yj40PFwvc3ViPiBcdWMwYWNcdWM3NzRcdWM3NTggXHVhYzcwXHViOWFjXHVjNjQwIFx1YWMxOVx1Yzc0NCBcdWI1NGMgXHVjNzc0XHVhYzgzXHVjNzc0IFx1YzgxNVx1YzBhY1x1YWMwMVx1ZDYxNVx1Yzc0NCBcdWM3NzRcdWI4ZWNcdWIyZTRcdWFjZTAgXHViOWQwXHVkNTVjXHViMmU0LjxcL3A+XHJcbiIsImlucHV0IjoiPHA+XHVjY2FiIFx1YmM4OFx1YzlmOCBcdWM5MDRcdWM1ZDAgXHVjMGFjXHVjOWM0IFx1YzE4ZFx1Yzc1OCBcdWM5YzFcdWMxMjBcdWM3NTggXHVhYzFjXHVjMjE4XHViOTdjIFx1Yzc1OFx1YmJmOFx1ZDU1OFx1YjI5NCBcdWM4MTVcdWMyMTggblx1Yzc3NCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuJm5ic3A7Jm5ic3A7KDEgJmxlOyBuICZsZTsgMiwwMDApPFwvcD5cclxuXHJcbjxwPlx1YjRhNFx1Yzc1OCBuXHVhYzFjXHVjNzU4IFx1YzkwNFx1YzVkMFx1YjI5NCBcdWM5YzFcdWMxMjAgXHVhYzAxXHVhYzAxXHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWMxMjRcdWJhODVcdWM3NzQgXHVjNzc0XHVjNWI0XHVjOWMwXHViMjk0XHViMzcwLCBcdWM5YzFcdWMxMjBcdWI0ZTRcdWM3NDAgXHVjOWMxXHVjMTIwIFx1YzcwNFx1Yzc1OCBcdWI0NTAgXHVjODEwXHVjNzU4IFx1Yzg4Y1x1ZDQ1Y1x1Yjk3YyBcdWQxYjVcdWQ1NzQgXHVjOGZjXHVjNWI0XHVjOWMwXHViYTcwLCBcdWFkNmNcdWNjYjRcdWM4MDFcdWM3M2NcdWI4NWNcdWIyOTQgXHVjZDVjXHViMzAwIDEwLDAwMFx1Yzc3OCBcdWIxMjQgXHVjODE1XHVjMjE4IHg8c3ViPjE8XC9zdWI+LCB5PHN1Yj4xPFwvc3ViPiwgeDxzdWI+MjxcL3N1Yj4sIHk8c3ViPjI8XC9zdWI+XHVjNzNjXHViODVjIFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC4gXHVjNzc0IFx1YzljMVx1YzEyMFx1Yzc0MCAoeDxzdWI+MTxcL3N1Yj4sIHk8c3ViPjE8XC9zdWI+KVx1YWNmYyAoeDxzdWI+MjxcL3N1Yj4sIHk8c3ViPjI8XC9zdWI+KVx1Yjk3YyBcdWM5YzBcdWIwOWNcdWIyZTRcdWIyOTQgXHVhYzgzXHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWI0NTAgXHVjODEwXHVjNzU4IFx1Yzg4Y1x1ZDQ1Y1x1YjI5NCBcdWIyZTRcdWI5NzRcdWIyZTRcdWFjZTAgXHVhYzAwXHVjODE1XHVkNTc0XHViM2M0IFx1Yzg4Ylx1YjJlNC4gXHVhZGY4XHViOWFjXHVhY2UwIFx1YmFhOFx1YjRlMCBcdWM5YzFcdWMxMjBcdWM3NDAgXHViMmU0XHViOTc0XHViMmU0XHVhY2UwIFx1YWMwMFx1YzgxNVx1ZDU3NFx1YjNjNCBcdWM4OGJcdWIyZTQuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+XHVhZGY4XHViOWJjIFx1YzE4ZFx1Yzc1OCBcdWM5YzFcdWMxMjBcdWI0ZTRcdWI4NWMgXHVjNzc0XHViOGU4XHVjNWI0XHVjOWM0IFx1YzgxNVx1YzBhY1x1YWMwMVx1ZDYxNVx1Yzc1OCBcdWFjMWNcdWMyMThcdWI5N2MgXHVkNTVjIFx1YWMxY1x1Yzc1OCBcdWM4MTVcdWMyMThcdWI4NWMgXHVkNTVjIFx1YzkwNFx1YzVkMCBcdWNkOWNcdWI4MjVcdWQ1NThcdWI3N2MuPFwvcD5cclxuIiwiaGludCI6IiIsIm9yaWdpbmFsIjoiMCIsImh0bWxfdGl0bGUiOiIwIiwicHJvYmxlbV9sYW5nX3Rjb2RlIjoiS29yZWFuIn0seyJwcm9ibGVtX2lkIjoiMTAyNjciLCJwcm9ibGVtX2xhbmciOiIxIiwidGl0bGUiOiJIb3cgbWFueSBzcXVhcmVzPyIsImRlc2NyaXB0aW9uIjoiPHA+V2hpbGUgYnJvd3NpbmcgdGhlIGludGVybmV0LCBvZiBjb3Vyc2UgdXNpbmcgSW50ZXJuZXQgRXhwbG9yZXIgd2l0aG91dCBhbnkgYWRibG9ja2VyLCB5b3UgaGF2ZSBub3RpY2VkIGEgbnVtYmVyIG9mIGludGVyZXN0aW5nIGNvbXBldGl0aW9ucyBhZHZlcnRpc2VkIGluIHRoZSBwYW5lbHMgb24gdmFyaW91cyB3ZWJwYWdlcy4gSW4gbW9zdCBvZiB0aGVzZSBjb21wZXRpdGlvbnMgeW91IG5lZWQgdG8gYW5zd2VyIGEgc2ltcGxlIHF1ZXN0aW9uLCBsaWtlIGhvdyBtYW55IHRyaWFuZ2xlc1wvc3F1YXJlc1wvcmVjdGFuZ2xlcyB0aGVyZSBhcmUgaW4gYSBwaWN0dXJlLCBvciBldmVuIGNob29zZSB0aGUgcmlnaHQgYW5zd2VyIG91dCBvZiB0aHJlZSBwb3NzaWJpbGl0aWVzLiBEZXNwaXRlIHRoZSBzaW1wbGljaXR5IG9mIHRoZSB0YXNrLCBpdCBzZWVtcyB0aGF0IHRoZXJlIGFyZSBtYW55IHZhbHVhYmxlIHByaXplcyB0byBiZSB3b24uIFNvIHRoZXJlIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGNvbXBldGUgZm9yITxcL3A+XHJcblxyXG48cD5JbiBvcmRlciB0byBpbmNyZWFzZSB5b3VyIGNoYW5jZXMsIHlvdSBkZWNpZGVkIHRvIHdyaXRlIGEgc2ltcGxlIHByb2dyYW0gdGhhdCB3aWxsIHNvbHZlIHRoZSBwcm9ibGVtIGZvciB5b3UuIFlvdSBkZWNpZGVkIHRvIGZvY3VzIGZpcnN0IG9uIHRoZSBxdWVzdGlvbiAmbGRxdW87SG93IG1hbnkgc3F1YXJlcyBhcmUgdGhlcmUgaW4gdGhlIHBpY3R1cmU/JnJkcXVvOywgYW5kIHRvIHNpbXBsaWZ5IHRoZSBwcm9ibGVtIGV2ZW4gbW9yZSwgeW91IGFzc3VtZSB0aGF0IHRoZSBpbnB1dCBwaWN0dXJlIGNvbnNpc3RzIG9ubHkgb2YgYSBudW1iZXIgb2YgbGluZXMgdGhhdCBhcmUgaW5maW5pdGUgaW4gYm90aCBkaXJlY3Rpb25zLiBUbyBiZSBwcmVjaXNlLCB3ZSBzYXkgdGhhdCBmb3VyIGxpbmVzIFx1MjExMzxzdWI+MTxcL3N1Yj4sIFx1MjExMzxzdWI+MjxcL3N1Yj4sIFx1MjExMzxzdWI+MzxcL3N1Yj4sIFx1MjExMzxzdWI+NDxcL3N1Yj4gaW4gdGhlIHBpY3R1cmUgZm9ybSBhIHNxdWFyZSBpZiBsaW5lcyBcdTIxMTM8c3ViPjE8XC9zdWI+IGFuZCBcdTIxMTM8c3ViPjM8XC9zdWI+IGFyZSBwYXJhbGxlbCB0byBlYWNoIG90aGVyIGFuZCBwZXJwZW5kaWN1bGFyIHRvIFx1MjExMzxzdWI+MjxcL3N1Yj4gYW5kIFx1MjExMzxzdWI+NDxcL3N1Yj4sIGFuZCBtb3Jlb3ZlciB0aGUgZGlzdGFuY2UgYmV0d2VlbiBcdTIxMTM8c3ViPjE8XC9zdWI+IGFuZCBcdTIxMTM8c3ViPjM8XC9zdWI+IGlzIHRoZSBzYW1lIGFzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIFx1MjExMzxzdWI+MjxcL3N1Yj4gYW5kIFx1MjExMzxzdWI+NDxcL3N1Yj4uPFwvcD5cclxuIiwiaW5wdXQiOiI8cD5UaGUgZmlyc3QgbGluZSBvZiB0aGUgaW5wdXQgY29udGFpbnMgYSBzaW5nbGUgaW50ZWdlciBuICgxICZsZTsgbiAmbGU7IDIgMDAwKSwgZGVub3RpbmcgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgaW5wdXQgcGljdHVyZS4gVGhlbiBmb2xsb3cgbiBsaW5lcywgZWFjaCBjb250YWluaW5nIGEgZGVzY3JpcHRpb24gb2Ygb25lIGxpbmUgaW4gdGhlIGlucHV0IHBpY3R1cmUuIFRoZSBsaW5lIGlzIGdpdmVuIGFzIGEgcGFpciBvZiBkaXN0aW5jdCBwb2ludHMgbHlpbmcgb24gaXQuIFRoYXQgaXMsIHRoZSBkZXNjcmlwdGlvbiBjb25zaXN0cyBvZiBmb3VyIGludGVnZXJzIHg8c3ViPjE8XC9zdWI+LCB5PHN1Yj4xPFwvc3ViPiwgeDxzdWI+MjxcL3N1Yj4sIHk8c3ViPjI8XC9zdWI+LCBlYWNoIG9mIHRoZW0gb2YgYWJzb2x1dGUgdmFsdWUgYXQgbW9zdCAxMCAwMDAsIHN1Y2ggdGhhdCB0aGUgbGluZSBwYXNzZXMgdGhyb3VnaCBwb2ludHMgKHg8c3ViPjE8XC9zdWI+LCB5PHN1Yj4xPFwvc3ViPikgYW5kICh4PHN1Yj4yPFwvc3ViPiwgeTxzdWI+MjxcL3N1Yj4pLiBZb3UgbWF5IGFzc3VtZSB0aGF0IHBvaW50cyAoeDxzdWI+MTxcL3N1Yj4sIHk8c3ViPjE8XC9zdWI+KSBhbmQgKHg8c3ViPjI8XC9zdWI+LCB5PHN1Yj4yPFwvc3ViPikgYXJlIGRpZmZlcmVudCwgYW5kIGFsc28gdGhhdCBhbGwgdGhlIGxpbmVzIGluIHRoZSBwaWN0dXJlIGFyZSBwYWlyd2lzZSBkaWZmZXJlbnQuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+T3V0cHV0IGV4YWN0bHkgb25lIGxpbmUgd2l0aCBvbmUgaW50ZWdlciwgZGVub3RpbmcgdGhlIHRvdGFsIG51bWJlciBvZiBzcXVhcmVzIGZvcm1lZCBieSB0aGUgbGluZXMgaW4gdGhlIHBpY3R1cmUuPFwvcD5cclxuIiwiaGludCI6IiIsIm9yaWdpbmFsIjoiMSIsImh0bWxfdGl0bGUiOiIwIiwicHJvYmxlbV9sYW5nX3Rjb2RlIjoiRW5nbGlzaCJ9XQ==

출처

ICPC > Regionals > Europe > Northwestern European Regional Contest > Nordic Collegiate Programming Contest > NCPC 2014 I번

  • 문제를 만든 사람: Michał Pilipczuk