답안 #1086147

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1086147 2024-09-09T15:56:21 Z not_amir Mixture (BOI20_mixture) C++14
컴파일 오류
0 ms 0 KB
#include <bits/stdc++.h>
using namespace std;
 
#define pii pair<int, int>
#define PI M_PI - 1e-2
 
int main(){
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    int S, P, G, N;
    cin >> S >> P >> G >> N;
    G += S + P;
    multiset<pii> pts;
    multiset<long double> angles;
    vector<pair<pii, long double>> add;
    int ctrp = 0, ctrl = 0, ctrt = 1, t = 0;
    while(N--){
        char c;
        cin >> c;
        if(c == 'A'){
            int x, y, z, divide;
            pii fi;
            long double se;
            cin >> x >> y >> z;
            z += x + y;
            x = x * G - S * z;
            y = y * G - P * z;
            if(x == 0 && y == 0)
                ctrp++;
            else{
                divide = gcd(x, y);
                x?x /= divide:0; y?y /= divide:0;
                if(pts.find({x, y}) == pts.end() && pts.find({-x, -y}) != pts.end()) ctrl++;
                auto it2 = pts.insert(fi = {x, y});
                auto it = angles.insert(se = atan2l(y, x));
                if(angles.size() > 2){
                    if(it == angles.begin())
                        if(*angles.rbegin() - se > PI) ctrt=1;
                    else
                        if(se - *--it > PI) ctrt=1;
                    if(it == angles.end())
                        if(se - *angles.begin() > PI) ctrt=1;
                    else
                        if(*++it - se > PI) ctrt=1;
                }
                else
                    ctrt = 1;
                add.push_back({fi, se});
            }
        }
        else{
            int r, x, y;
            cin >> r;
            auto it2 = pts.find(add[r-1].first);
            auto it = angles.find(add[r-1].second);
            x = (*it2).first; y= (*it2).second;
            if(x == 0 && y == 0)
                ctrp--;
            else{
                pts.erase(it2);
                if(pts.find({x, y}) == pts.end() && pts.find({-x, -y}) != pts.end()) ctrl--;
                if(angles.size() > 2){
                    if(it == angles.begin())
                        if(*angles.rbegin() - *it > PI) ctrt=0;
                    else
                        if(*it - *--it > PI) ctrt=0;
                    if(it == angles.end())
                        if(*it - *angles.begin() > PI) ctrt=0;
                    else
                        if(*++it - *it > PI) ctrt=0;
                }
                else
                    ctrt = 1;
                angles.erase(it);
            }
        }
        if(ctrp)
            cout << "1\n";
        else if(ctrl)
            cout << "2\n";
        else if(!ctrt)
            cout << "3\n";
        else
            cout << "0\n";
    }
}

Compilation message

Mixture.cpp: In function 'int main()':
Mixture.cpp:30:26: error: 'gcd' was not declared in this scope
   30 |                 divide = gcd(x, y);
      |                          ^~~
Mixture.cpp:36:23: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
   36 |                     if(it == angles.begin())
      |                       ^
Mixture.cpp:40:23: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
   40 |                     if(it == angles.end())
      |                       ^
Mixture.cpp:62:23: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
   62 |                     if(it == angles.begin())
      |                       ^
Mixture.cpp:66:23: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
   66 |                     if(it == angles.end())
      |                       ^
Mixture.cpp:15:39: warning: unused variable 't' [-Wunused-variable]
   15 |     int ctrp = 0, ctrl = 0, ctrt = 1, t = 0;
      |                                       ^