답안 #633358

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
633358 2022-08-22T08:04:15 Z andrei_boaca Printed Circuit Board (CEOI12_circuit) C++14
30 / 100
100 ms 6812 KB
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef long double ld;
int n;
struct point
{
    ll x,y,ang,poz;
} v[100005];
bool byang(int q, int t)
{
    point a=v[q];
    point b=v[t];
    if(a.y*b.x!=a.x*b.y)
        return a.y*b.x<a.x*b.y;
    return a.x<b.x;
}
bool iseq(point A, point B)
{
    return A.x==B.x&&A.y==B.y;
}
bool intersect(point A, point B, point C)
{
    if(iseq(A,C)||iseq(B,C))
        return 1;

    ll a1=B.y-A.y;
    ll b1=A.x-B.x;
    ll c1=-a1*A.x-b1*A.y;

    ll a2=C.y;
    ll b2=-C.x;
    ll c2=0;

    ld coef=a2*b1-a1*b2;
    if(coef==0)
        return 0;
    ld y=ld(-a2*c1)/coef;
    ld x=ld(-b2*y)/a2;
    if(x<C.x&&y<C.y&&x>0&&y>0)
        return 1;
    return 0;
}
bool bylin(int q,int t)
{
    point a=v[q];
    int nxt=q+1;
    if(nxt>n)
        nxt=1;
    point b=v[nxt];

    point c=v[t];
    nxt=t+1;
    if(nxt>n)
        nxt=1;
    point d=v[nxt];

    bool isC=intersect(a,b,c);
    bool isD=intersect(a,b,d);
    if(isC==0&&isD==0)
        return 0;
    if(isC==1&&isD==1)
        return 1;

    bool isA=intersect(c,d,a);
    bool isB=intersect(c,d,b);
    if(isA==0&&isB==0)
        return 1;
    if(isA==1&&isB==1)
        return 0;
    return 0;
}
int fst[100005];
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i].x>>v[i].y;
        v[i].poz=i;
    }
    vector<int> ind;
    for(int i=1;i<=n;i++)
        ind.push_back(i);
    sort(ind.begin(),ind.end(),byang);
    int nr=0;
    for(int i=0;i<ind.size();i++)
    {
        if(i==0)
            nr++;
        else
        {
            point a=v[ind[i-1]];
            point b=v[ind[i]];
            if(a.y*b.x!=a.x*b.y)
                nr++;
        }
        v[ind[i]].ang=nr;
    }
    ind.clear();
    for(int i=1;i<=n;i++)
        ind.push_back(i);
    sort(ind.begin(),ind.end(),bylin);
    for(int i:ind)
    {
        int st=v[i].ang;
        int nxt=i+1;
        if(nxt>n)
            nxt=1;
        int dr=v[nxt].ang;
        if(st>dr)
            swap(st,dr);
        for(int j=st;j<=dr;j++)
            if(fst[j]==0)
                fst[j]=i;
    }
    vector<int> sol;
    for(int i=1;i<=n;i++)
    {
        int ang=v[i].ang;
        //cout<<fst[ang]<<' ';
        int prv=i-1;
        if(i==1)
            prv=n;
        if(fst[ang]!=i&&fst[ang]!=prv)
            continue;
        sol.push_back(i);
    }
    sort(sol.begin(),sol.end());
    cout<<sol.size()<<'\n';
    for(int i:sol)
        cout<<i<<' ';
    return 0;
}

Compilation message

circuit.cpp: In function 'bool intersect(point, point, point)':
circuit.cpp:34:8: warning: unused variable 'c2' [-Wunused-variable]
   34 |     ll c2=0;
      |        ^~
circuit.cpp: In function 'int main()':
circuit.cpp:90:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   90 |     for(int i=0;i<ind.size();i++)
      |                 ~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 2 ms 468 KB Output is correct
4 Correct 3 ms 468 KB Output is correct
5 Incorrect 30 ms 752 KB Output isn't correct
6 Incorrect 30 ms 764 KB Output isn't correct
7 Incorrect 62 ms 1228 KB Output isn't correct
8 Incorrect 17 ms 596 KB Output isn't correct
9 Correct 30 ms 720 KB Output is correct
10 Incorrect 23 ms 800 KB Output isn't correct
11 Runtime error 27 ms 1460 KB Execution killed with signal 6
12 Correct 38 ms 1148 KB Output is correct
13 Execution timed out 134 ms 1616 KB Time limit exceeded
14 Runtime error 49 ms 3532 KB Execution killed with signal 11
15 Correct 95 ms 2384 KB Output is correct
16 Execution timed out 209 ms 4360 KB Time limit exceeded
17 Execution timed out 1071 ms 4356 KB Time limit exceeded
18 Runtime error 18 ms 6740 KB Execution killed with signal 11
19 Runtime error 19 ms 6812 KB Execution killed with signal 11
20 Execution timed out 1088 ms 4152 KB Time limit exceeded