답안 #592147

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
592147 2022-07-08T16:40:33 Z jasmin Roads (CEOI20_roads) C++14
15 / 100
17 ms 1700 KB
#include<bits/stdc++.h>
using namespace std;
#define int long long

const int inf=1e18;

void subtask2(int n, vector<pair<pair<int,int>, pair<int,int> > >& p, vector<pair<pair<int,int>, pair<int,int> > >& old){
    auto compare=[&](int i, int j){
        auto a=p[i];
        auto b=p[j];
        if(a.first<b.first) return true;
        else if(a.first>b.first) return false;
        else{
            if(a.second<b.second) return true;
            return false;
        }
    };
    vector<int> sorted(n);
    iota(sorted.begin(), sorted.end(), 0);
    sort(sorted.begin(), sorted.end(), compare);
    pair<int,int> last={-inf, -inf};
    for(int i=0; i<n; i++){
        auto a=old[sorted[i]].first;
        auto b=old[sorted[i]].second;

        if(last.first!=-inf){
            cout << last.first << " " << last.second << " " << a.first << " " << a.second << "\n";
        }
        last=b;
    }
}

int length(pair<int,int> a, pair<int,int> b){
    int x1=abs(a.first-b.first);
    int x2=abs(a.second-b.second);
    int square=x1*x1 + x2*x2;

    int l=0; int r=square;
    int ans=0;
    while(l<=r){
        int m=l+(r-l)/2;
        if(m*m<=square){
            ans=m;
            l=m+1;
        }
        else{
            r=m-1;
        }
    }
    return ans;
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin >> n;
    vector<pair<pair<int,int>, pair<int,int> > >p(n);
    bool s2=true;
    for(int i=0; i<n; i++){
        cin >> p[i].first.first >> p[i].first.second;
        cin >> p[i].second.first >> p[i].second.second;
        if(p[i].first>p[i].second){
            swap(p[i].first, p[i].second);
        }

        if(p[i].first.first!=p[i].second.first) s2=false;
    }

    if(s2){
        subtask2(n, p, p);
        return 0;
    }

    vector<pair<pair<int,int>, pair<int,int> > >p2=p;
    for(int i=0; i<n; i++){
        pair<int,int> a=p[i].first;
        pair<int,int> b=p[i].second;

        int l=length(a, b);
        pair<int,int> neu;
        neu.first=a.first;
        neu.second=a.second+l;

        p2[i].second=neu;
        if(p2[i].first>p2[i].second){
            swap(p2[i].first, p2[i].second);
        }
    }
    subtask2(n, p2, p);
}
# 결과 실행 시간 메모리 Grader output
1 Failed 0 ms 212 KB Condition failed: "!Cross(S[*pi], S[*pa])"
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 12 ms 980 KB Output is correct
5 Correct 17 ms 1700 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 7 ms 980 KB Output is correct
5 Correct 15 ms 1620 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Failed 1 ms 340 KB Condition failed: "!Cross(S[*pi], S[*pa])"
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 7 ms 996 KB Output is correct
5 Correct 16 ms 1620 KB Output is correct
6 Failed 0 ms 212 KB Condition failed: "!Cross(S[*pi], S[*pa])"
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Failed 0 ms 212 KB Condition failed: "!Cross(S[*pi], S[*pa])"
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Failed 0 ms 212 KB Condition failed: "!Cross(S[*pi], S[*pa])"
2 Halted 0 ms 0 KB -