Submission #130564

#TimeUsernameProblemLanguageResultExecution timeMemory
130564Bench0310Triangles (CEOI18_tri)C++17
20 / 100
2 ms380 KiB
#include <bits/stdc++.h>
#include "trilib.h"

using namespace std;

/*int get_n()
{
    return 6;
}

bool is_clockwise(int a,int b,int c)
{
    cout << "query: " << a << " " << b << " " << c << endl;
    int res;
    cin >> res;
    return res;
}

void give_answer(int s)
{
    cout << "answer: " << s << endl;
    exit(0);
}*/

int main()
{
    int n=get_n();
    vector<int> l,r;
    for(int i=3;i<=n;i++)
    {
        if(is_clockwise(1,2,i)) r.push_back(i);
        else l.push_back(i);
    }
    sort(l.begin(),l.end(),[](int a,int b){return is_clockwise(1,a,b);});
    sort(r.begin(),r.end(),[](int a,int b){return is_clockwise(1,a,b);});
    reverse(l.begin(),l.end());
    vector<int> one={1,2};
    for(int a:l)
    {
        while(one.size()>=2&&is_clockwise(one[one.size()-2],one.back(),a)) one.pop_back();
        one.push_back(a);
    }
    vector<int> two={1,2};
    for(int a:r)
    {
        while(two.size()>=2&&is_clockwise(two[two.size()-2],two.back(),a)==0) two.pop_back();
        two.push_back(a);
    }
    int res=one.size()+two.size()-2;
    if(min(one.size(),two.size())>=3&&is_clockwise(2,one[2],two[2])) res--;
    if(min(one.size(),two.size())>=3&&is_clockwise(1,one.back(),two.back())==0) res--;
    give_answer(res);
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...