結果
問題 | No.245 貫け! |
ユーザー |
|
提出日時 | 2015-09-04 03:06:15 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 11 ms / 5,000 ms |
コード長 | 2,019 bytes |
コンパイル時間 | 628 ms |
コンパイル使用メモリ | 86,140 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-18 23:40:30 |
合計ジャッジ時間 | 1,231 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 16 |
ソースコード
#include <iostream>#include <iomanip>#include <vector>#include <algorithm>#include <numeric>#include <functional>#include <cmath>#include <queue>#include <stack>#define repd(i,a,b) for (int i=(a);i<(b);i++)#define rep(i,n) repd(i,0,n)typedef long long ll;using namespace std;int inputValue(){int a;cin >> a;return a;};void inputArray(int * p, int a){rep(i, a){cin >> p[i];}};void inputVector(vector<int> * p, int a){rep(i, a){int input;cin >> input;p -> push_back(input);}}template <typename T>void output(T a, int precision) {if(precision > 0){cout << setprecision(precision) << a << "\n";}else{cout << a << "\n";}}// pointclass point{public:int x;int y;point(int x, int y){this -> x = x;this -> y = y;}};// 直線mnが線分pqを貫くか?bool isOnLine(point m, point n, point p, point q){bool ret = false;// 直線mnの方程式 ax + by + c = 0int a = n.y - m.y;int b = -(n.x - m.x);int c = n.x * m.y - m.x * n.y;int sp = a * p.x + b * p.y + c;int sq = a * q.x + b * q.y + c;if (sp * sq <= 0) {ret = true;}return ret;}vector<point> P;int main(int argc, const char * argv[]) {// source codeint N = inputValue();rep(i, 2 * N){P.push_back(point(inputValue(), inputValue()));}int ret = 0;if (N == 1) {ret = 1;}rep(i, 2 * N){rep(j, 2 * N){if (i == j) {continue;}if (P[i].x == P[j].x && P[i].y == P[j].y) {continue;}int pass = 0;rep(k, N){if (isOnLine(P[i], P[j], P[2 * k], P[2 * k + 1])) {pass++;}}ret = max(ret, pass);}}output(ret, 0);return 0;}