結果
問題 | No.2355 Unhappy Back Dance |
ユーザー |
|
提出日時 | 2023-06-16 22:50:03 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 329 ms / 6,000 ms |
コード長 | 2,099 bytes |
コンパイル時間 | 5,858 ms |
コンパイル使用メモリ | 322,668 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-06-24 15:45:27 |
合計ジャッジ時間 | 11,987 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 37 |
ソースコード
#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;rep(i, 0, n) {ll x, y;cin >> x >> y;pos.push_back(P(x, y));}int ans = 0;rep(i, 0, pos.size()) {vector<P> possub;rep(j, 0, pos.size()) {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";}