Submission #761713

#TimeUsernameProblemLanguageResultExecution timeMemory
761713alexander707070Rectangles (IOI19_rect)C++14
Compilation error
0 ms0 KiB
#include<bits/stdc++.h>
#define MAXN 100007
using namespace std;

struct point{
    int x,y;

    inline friend bool operator < (point fr,point sc){
        return fr.x<sc.x;
    }
};

int n,last,cnt,pos,s;
point p[MAXN],endp;
bool used[MAXN];
long long av;
vector< pair<point,point> > v;

point intersec(point a,point b){
    return {a.x,b.y};
}

string name[10]={"01.in","02.in","03.in","04.in","05.in","06.in","07.in","08.in","09.in","10.in"};
string eman[10]={"01.out","02.out","03.out","04.out","05.out","06.out","07.out","08.out","09.out","10.out"};

int main(){

    fstream cinn,conn;

    for(int test=0;test<4;test++){

    cinn.open(name[test],ios_base::in);
    conn.open(eman[test],ios_base::out);

    cinn>>n;
    v.clear(); av=0;
    for(int i=1;i<=n;i++){
        cinn>>p[i].x>>p[i].y;
        used[i]=false; av+=p[i].y;
    }
    av/=n;

    sort(p+1,p+n+1);

    used[1]=true; endp=p[1];
    pos=0; last=1;

    cnt=n-1;
    while(cnt>0){
        s=0;
        for(int i=1;i<=n;i++){
            if(used[i])continue;

            if(pos==0 and !(p[i].y>av and p[last].y<p[i].y) and !(p[i].y<av and p[last].y>p[i].y)){
                used[i]=true; cnt--;
                v.push_back({endp,intersec(p[i],p[last])});
                endp=intersec(p[i],p[last]);

                if(p[i].y>p[last].y)pos=1;
                else pos=2;

                last=i;
            }else if(pos==1 and p[i].y>p[last].y){
                used[i]=true; cnt--;
                v.push_back({endp,intersec(p[last],p[i])});
                endp=intersec(p[last],p[i]);

                pos=0; last=i;
            }else if(pos==2 and p[i].y<p[last].y){
                used[i]=true; cnt--;
                v.push_back({endp,intersec(p[last],p[i])});
                endp=intersec(p[last],p[i]);

                pos=0; last=i;
            }else{
                s=i;
            }
        }

        if(s!=0){
            used[s]=true; cnt--;

            v.push_back({endp,p[last]});
            v.push_back({p[last],intersec(p[s],p[last])});
            endp=intersec(p[s],p[last]);

            if(p[last].y<p[s].y)pos=1;
            else pos=2;
            last=s;
        }

        s=0;
        for(int i=n;i>=1;i--){
            if(used[i])continue;

            if(pos==0  and !(p[i].y>av and p[last].y<p[i].y) and !(p[i].y<av and p[last].y>p[i].y)){
                used[i]=true; cnt--;
                v.push_back({endp,intersec(p[i],p[last])});
                endp=intersec(p[i],p[last]);

                if(p[i].y>p[last].y)pos=1;
                else pos=2;

                last=i;
            }else if(pos==1 and p[i].y>p[last].y){
                used[i]=true; cnt--;
                v.push_back({endp,intersec(p[last],p[i])});
                endp=intersec(p[last],p[i]);

                pos=0; last=i;
            }else if(pos==2 and p[i].y<p[last].y){
                used[i]=true; cnt--;
                v.push_back({endp,intersec(p[last],p[i])});
                endp=intersec(p[last],p[i]);

                pos=0; last=i;
            }else{
                s=i;
            }
        }

        if(s!=0){
            used[s]=true; cnt--;

            v.push_back({endp,p[last]});
            v.push_back({p[last],intersec(p[s],p[last])});
            endp=intersec(p[s],p[last]);

            if(p[last].y<p[s].y)pos=1;
            else pos=2;
            last=s;
        }
    }

    v.push_back({endp,p[last]});
    v.push_back({p[last],{p[last].x,0}});
    v.push_back({{p[last].x,0},{0,0}});

    conn<<v.size()+1<<"\n";
    for(int i=v.size()-1;i>=0;i--){
        conn<<v[i].second.x<<" "<<v[i].second.y<<"\n";
    }
    conn<<v[0].first.x<<" "<<v[0].first.y<<"\n";

    cinn.close();
    conn.close();

    cout<<test<<" ";

    }

    /*
    cout<<v.size()+1<<"\n";
    for(int i=0;i<v.size();i++){
        cout<<v[i].first.x<<" "<<v[i].first.y<<" "<<v[i].second.x<<" "<<v[i].second.y<<"\n";
    }
    cout<<v.back().second.x<<" "<<v.back().second.y<<"\n";
    */

    return 0;
}

/**

20
80 32
59 15
54 47
22 84
53 28
68 40
60 11
61 100
16 83
64 20
20 6
32 2
50 98
72 37
66 4
18 94
41 25
97 99
30 86
74 49



*/

Compilation message (stderr)

/usr/bin/ld: /tmp/ccgcpYsV.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cc2wZRKU.o:rect.cpp:(.text.startup+0xb0): first defined here
/usr/bin/ld: /tmp/ccgcpYsV.o: in function `main':
grader.cpp:(.text.startup+0x6fa): undefined reference to `count_rectangles(std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >)'
collect2: error: ld returned 1 exit status