Submission #1270733

#TimeUsernameProblemLanguageResultExecution timeMemory
1270733thuhienneMixture (BOI20_mixture)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using i64 = long long;
const long double PI = acosl(-1.0L);
const long double EPS = 1e-15L;

// pair hash for unordered_map
struct PairHash {
    size_t operator()(pair<ll,ll> const &p) const noexcept {
        return (uint64_t)(p.first * 1000003ULL) ^ (uint64_t)(p.second + 0x9e3779b97f4a7c15ULL);
    }
};

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
#if 0
    // Example: to debug with sample from statement
    // 1 2 3
    // 6
    // A 5 6 7
    // A 3 10 17
    // R 1
    // A 15 18 21
    // A 5 10 15
    // R 3
#endif

    // read target
    ll Sf, Pf, Gf;
    if(!(cin >> Sf >> Pf >> Gf)) return 0;
    vector<ll> Tf = {Sf, Pf, Gf};

    // choose index base i where Tf[i] > 0
    int idx = -1;
    for(int t=0;t<3;t++) if(Tf[t] > 0) { idx = t; break; }
    if(idx == -1) {
        // should not happen per statement (Tf sum > 0)
        return 0;
    }
    int j = (idx+1)%3;
    int k = (idx+2)%3;

    int N;
    cin >> N;

    // store per bottle info for removal
    struct BottleInfo {
        bool exists = false;
        bool is_equal = false; // (A,B)==(0,0)
        pair<ll,ll> key; // normalized direction representative
        int sign; // +1 or -1 for which side
        long double angle; // angle of (A,B)
    };
    vector<BottleInfo> bottles; bottles.reserve(N+5);
    bottles.push_back(BottleInfo()); // 1-based indexing for add ids
    int added_count = 0;

    // data structures:
    // count of exact equals (1-case)
    int count_equal = 0;

    // map from normalized rep (a,b) to pair(pos_count, neg_count)
    unordered_map<pair<ll,ll>, pair<int,int>, PairHash> dirCount;

    // for checking case 3: dynamic set of angles (for non-zero vectors)
    set<long double> angles; // sorted distinct angles (but multiple bottles at same angle allowed; we use multiset of angles counts by storing duplicates too using multiset? We'll store duplicates by storing identical angles in multisetAngles.)
    multiset<long double> multAngles; // allow duplicates
    // to maintain gaps between consecutive angles, we use multiset of gaps
    multiset<long double> gaps;

    auto addGap = [&](long double g){ gaps.insert(g); };
    auto eraseGap = [&](long double g){
        auto it = gaps.find(g);
        if(it != gaps.end()) gaps.erase(it);
    };

    // helper to get normalized representative and sign from (A,B)
    auto normalizeAB = [&](ll A, ll B)->pair<pair<ll,ll>, int> {
        if (A==0 && B==0) return {{0,0}, 0};
        ll g = std::gcd( std::llabs(A), std::llabs(B) );
        A /= g; B /= g;
        // normalize sign so that representative has (a>0) or (a==0 && b>0)
        if (A > 0 || (A==0 && B > 0)) {
            return {{A,B}, +1};
        } else {
            return {{-A,-B}, -1};
        }
    };

    // angl

Compilation message (stderr)

Mixture.cpp: In function 'int main()':
Mixture.cpp:91:7: error: expected '}' at end of input
   91 |     };
      |       ^
Mixture.cpp:16:11: note: to match this '{'
   16 | int main(){
      |           ^