結果
問題 | No.2355 Unhappy Back Dance |
ユーザー |
|
提出日時 | 2023-06-16 22:43:18 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 2,079 bytes |
コンパイル時間 | 6,070 ms |
コンパイル使用メモリ | 320,888 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-06-24 15:32:08 |
合計ジャッジ時間 | 11,999 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 RE * 9 |
ソースコード
#include <bits/stdc++.h>#include <atcoder/all>using namespace std;using namespace atcoder;struct Fast {Fast() {std::cin.tie(nullptr);ios::sync_with_stdio(false);cout << setprecision(10);}} fast;#define popcount(x) __builtin_popcount(x)#define all(a) (a).begin(), (a).end()#define contains(a, x) ((a).find(x) != (a).end())#define rep(i, a, b) for (int i = (a); i < (int)(b); i++)#define rrep(i, a, b) for (int i = (int)(b)-1; i >= (a); i--)#define YN(b) cout << ((b) ? "YES" : "NO") << "\n";#define Yn(b) cout << ((b) ? "Yes" : "No") << "\n";#define yn(b) cout << ((b) ? "yes" : "no") << "\n";using ll = long long;template <typename T>bool chmax(T &a, const T &b) {if (a < b) {a = b;return true;}return false;}template <typename T>bool chmin(T &a, const T &b) {if (a > b) {a = b;return true;}return false;}int main() {using lll = __int128_t;using P = pair<lll, lll>;auto Area = [&](P p) {if (p.first > 0 && p.second >= 0) return 0;if (p.first <= 0 && p.second > 0) return 1;if (p.first < 0 && p.second <= 0) return 2;if (p.first >= 0 && p.second < 0) return 3;return -1;};auto Dot = [&](P p1, P p2) {return p1.first * p2.first + p1.second * p2.second;};auto Cross = [&](P p1, P p2) {return p1.first * p2.second - p1.second * p2.first;};int n;cin >> n;vector<P> pos(n);rep(i, 0, n) {ll x, y;cin >> x >> y;pos[i] = P(x, y);}int ans = 0;rep(i, 0, n) {vector<P> possub;rep(j, 0, n) {if (i != j) possub.push_back(P(pos[j].first - pos[i].first, pos[j].second - pos[i].second));}sort(all(possub), [Area, Cross](P const &p1, P const &p2) {if (Area(p1) != Area(p2)) return Area(p1) < Area(p2);return Cross(p1, p2) >= 0;});for (int j = 0; j + 1 < (int)possub.size(); j++) {auto p1 = possub[j];auto p2 = possub[j + 1];if (Dot(p1, p2) > 0 && Cross(p1, p2) == 0) {ans++;break;}}}cout << ans << "\n";}