답안 #103581

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
103581 2019-03-31T18:00:47 Z kishtarn555 Konj (COCI19_konj) C++14
70 / 70
112 ms 17280 KB
#include<iostream>
#include<map>
#include<set>
#include<vector>

using namespace std;
int N;
struct line{
    int x1,y1,x2,y2;

};
line traces[200005];
bool visited[200005];
bool indraw[200005];
vector<int> adj[303][303];
bool drawing[303][303];
int x,y;
bool inside(int index) {
    if (x < min (traces[index].x1,traces[index].x2) ||x > max (traces[index].x1,traces[index].x2))
        return false;
    if (y < min (traces[index].y1,traces[index].y2) ||y > max (traces[index].y1,traces[index].y2))
        return false;
    return (x-traces[index].x1)*(y-traces[index].y2)-(x-traces[index].x2)*(y-traces[index].y1)==0;

}
void dfs(int cur) {
//    cout << cur<< endl;
    if (visited[cur])return ;//indraw[cur];
//    cout << cur<< endl;

    visited[cur]=true;
    indraw[cur]=true;
    int ni;
    for (int i = 0; i < adj[traces[cur].x1][traces[cur].y1].size(); i++) {
        ni = adj[traces[cur].x1][traces[cur].y1][i];
        if (cur==ni)continue;
        dfs(ni);
    }
    for (int i = 0; i < adj[traces[cur].x2][traces[cur].y2].size(); i++) {
        ni = adj[traces[cur].x2][traces[cur].y2][i];
        if (cur==ni)continue;
//        indraw[cur]=indraw[cur]||
            dfs(ni);
    }

    return ;//indraw[cur];
}

int mx=304,my=304,xx=-1,yy=-1;
void draw(int index) {
    if (traces[index].x1==traces[index].x2) {
            int fini = max(traces[index].y1,traces[index].y2);
            mx=min(traces[index].x1,mx);
            xx=max(traces[index].x1,xx);
            int x =traces[index].x1;
        for (int y = min(traces[index].y1,traces[index].y2);y<=fini; y++) {
            drawing[x][y]=true;
            my=min(y,my);
            yy=max(y,yy);
        }
        return;
    }
     int fini = max(traces[index].x1,traces[index].x2);
            my=min(traces[index].y1,my);
            yy=max(traces[index].y1,yy);
            int y =traces[index].y1;
        for (int x = min(traces[index].x1,traces[index].x2);x<=fini; x++) {
            drawing[x][y]=true;
            mx=min(x,mx);
            xx=max(x,xx);
        }
}
int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin >>N;
    for (int i = 0; i < N; i++) {
        cin >> traces[i].x1>>traces[i].y1>>traces[i].x2>>traces[i].y2;
        adj[traces[i].x1][traces[i].y1].push_back(i);
        adj[traces[i].x2][traces[i].y2].push_back(i);

    }
    cin >> x >> y;
    for (int i = 0; i < N; i++) {
        if(inside(i)) indraw[i]=true;
//        cout << indraw[i];

    }
//    cout << endl;
    for (int i = 0; i < N; i ++) {
        if (indraw[i]) {
            dfs(i);

        }
    }
    for (int i = 0; i < N; i++) {
        if(indraw[i])
            draw(i);
//            cout << indraw[i];

    }
//    cout << edndl;

    for (int y = yy; y>=my; y--){
        for (int x = mx; x <= xx; x++)
            cout << (drawing[x][y]?"#":".");
        cout << "\n";
    }


    return 0;
}

Compilation message

konj.cpp: In function 'void dfs(int)':
konj.cpp:34:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < adj[traces[cur].x1][traces[cur].y1].size(); i++) {
                     ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
konj.cpp:39:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < adj[traces[cur].x2][traces[cur].y2].size(); i++) {
                     ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2568 KB Output is correct
2 Correct 5 ms 2560 KB Output is correct
3 Correct 112 ms 17280 KB Output is correct
4 Correct 4 ms 2560 KB Output is correct
5 Correct 4 ms 2560 KB Output is correct
6 Correct 4 ms 2560 KB Output is correct
7 Correct 4 ms 2488 KB Output is correct
8 Correct 4 ms 2560 KB Output is correct
9 Correct 5 ms 2560 KB Output is correct
10 Correct 4 ms 2560 KB Output is correct