Submission #1080362

#TimeUsernameProblemLanguageResultExecution timeMemory
1080362EvirirDragon 2 (JOI17_dragon2)C++17
15 / 100
4042 ms36948 KiB
#include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> using namespace std; //using namespace __gnu_pbds; // #pragma GCC optimize("O3,unroll-loops") // #pragma GCC target("avx2") #define setp(x) cout<<fixed<<setprecision(x) #define sz(x) (int)(x).size() #define all(x) begin(x), end(x) #define forn(i,a,b) for(int i=(a);i<(b);i++) #define fore(i,a,b) for(int i=(a);i<=(b);i++) #define pb push_back #define F first #define S second #define fbo find_by_order #define ook order_of_key typedef long long ll; typedef long double ld; typedef pair<ll,ll> ii; typedef vector<ll> vi; typedef vector<ii> vii; //template<typename T> //using pbds = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; void SD(int t=0){ cout<<"PASSED "<<t<<endl; } template<typename T> void amax(T &a, T b){ a=max(a,b); } template<typename T> void amin(T &a, T b){ a=min(a,b); } struct Hash { static uint64_t splitmix64(uint64_t x) { // http://xorshift.di.unimi.it/splitmix64.c x += 0x9e3779b97f4a7c15; x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; x = (x ^ (x >> 27)) * 0x94d049bb133111eb; return x ^ (x >> 31); } size_t operator()(uint64_t x) const { static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count(); return splitmix64(x + FIXED_RANDOM); } }; const ll INF = ll(1e18); const int MOD = 998244353; const bool DEBUG = 0; const int MAXN = 100005; const int LG = 21; int n,m; vector<ii> p; vector<ll> x, y, c; ii s[2]; int Q; int sign(ll x) { if (x < 0) return -1; if (x == 0) return 0; return 1; } ll cross(ll x1, ll y1, ll x2, ll y2) { return x1 * y2 - x2 * y1; } ll cross(const ii& p1, const ii& p2) { return cross(p1.F, p1.S, p2.F, p2.S); } ii operator-(ii& p1, ii& p2) { return {p1.F - p2.F, p1.S - p2.S}; } int sideOf(ii& p1, ii& p2, ii& p3) // 1=right, 0 = on line, -1 = left { return sign(cross(p1 - p2, p3 - p2)); } bool isect(int i, int j) { int side1 = sideOf(s[0], p[i], p[j]); int side2 = sideOf(p[i], s[1], p[j]); int sidet = sideOf(s[0], p[i], s[1]); return side1 == side2 && side2 == sidet; } int main() { cin.tie(0)->sync_with_stdio(0); cin>>n>>m; p.resize(n); x.resize(n); y.resize(n); c.resize(n); forn(i, 0, n) { cin >> x[i] >> y[i] >> c[i]; p[i] = {x[i], y[i]}; c[i]--; } forn(i, 0, 2) cin >> s[i].F >> s[i].S; int ans[m][m]{}; forn(i, 0, n) forn(j, 0, n) { if (c[i] == c[j]) continue; if (isect(i, j)) ans[c[i]][c[j]]++; } cin>>Q; forn(z,0,Q) { int u,v; cin>>u>>v; u--; v--; cout << ans[u][v] << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...