답안 #633357

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
633357 2022-08-22T08:02:27 Z andrei_boaca Printed Circuit Board (CEOI12_circuit) C++14
20 / 100
100 ms 6740 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 Runtime error 2 ms 724 KB Execution killed with signal 11
4 Runtime error 2 ms 724 KB Execution killed with signal 11
5 Incorrect 39 ms 724 KB Output isn't correct
6 Incorrect 22 ms 760 KB Output isn't correct
7 Incorrect 69 ms 1168 KB Output isn't correct
8 Incorrect 20 ms 596 KB Output isn't correct
9 Correct 29 ms 716 KB Output is correct
10 Incorrect 21 ms 784 KB Output isn't correct
11 Runtime error 26 ms 1472 KB Execution killed with signal 6
12 Correct 34 ms 1152 KB Output is correct
13 Execution timed out 133 ms 1624 KB Time limit exceeded
14 Execution timed out 135 ms 3540 KB Time limit exceeded
15 Correct 97 ms 2344 KB Output is correct
16 Execution timed out 212 ms 4352 KB Time limit exceeded
17 Execution timed out 1078 ms 4356 KB Time limit exceeded
18 Runtime error 18 ms 6740 KB Execution killed with signal 11
19 Runtime error 24 ms 6712 KB Execution killed with signal 11
20 Execution timed out 1070 ms 4144 KB Time limit exceeded