Submission #503630

#TimeUsernameProblemLanguageResultExecution timeMemory
503630andrei_boacaTriangles (CEOI18_tri)C++17
0 / 100
1 ms204 KiB
#include <bits/stdc++.h>
#include "trilib.h"
//#include "trilib.c"
using namespace std;
map<vector<int>,bool> f;
set<int> border;
bool isgood(int a,int b,int c)
{
    vector<int> v;
    v.push_back(a);
    v.push_back(b);
    v.push_back(c);
    sort(v.begin(),v.end());
    if(f.count(v)==0)
        f[v]=is_clockwise(v[0],v[1],v[2]);
    bool ans=f[v];
    int nr=0;
    if(a!=v[0])
        nr++;
    if(b!=v[1])
        nr++;
    if(c!=v[2])
        nr++;
    if(nr%2==0&&nr>0)
        ans=!ans;
    return ans;
}
int main()
{
    int n;
    n=get_n();
    for(int i=1;i<=n;i++)
        if(border.find(i)==border.end())
        {
            int j=1;
            if(i==1)
                j=2;
            int good=2;
            int val=-1;
            for(int k=1;k<=n;k++)
                if(k!=i&&k!=j)
                {
                    int x=isgood(i,j,k);
                    if(val==-1)
                    {
                        val=x;
                        continue;
                    }
                    else if(x!=val)
                    {
                        good--;
                        if(good==0)
                            break;
                        //val=x;
                        j=k;
                    }
                }
            good=1;
            val=-1;
            for(int k=1;k<=n;k++)
                if(k!=i&&k!=j)
                {
                    int x=isgood(i,j,k);
                    if(val==-1)
                    {
                        val=x;
                        continue;
                    }
                    else if(x!=val)
                    {
                        good--;
                        if(good==0)
                            break;
                    }
                }
            if(good)
            {
                border.insert(i);
                border.insert(j);
            }
        }
    int ans=border.size();
    give_answer(ans);
    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...