답안 #314122

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
314122 2020-10-18T14:12:30 Z phathnv Konj (COCI19_konj) C++11
70 / 70
96 ms 13944 KB
#include <bits/stdc++.h>

#define mp make_pair
#define X first
#define Y second
#define taskname "KONJ"

using namespace std;

typedef long long ll;
typedef pair <int, int> ii;

const int N = 2e5 + 1;
const int D = 301;

struct lineSegment{
    int a, b, c, d;
    bool contains(int x, int y){
        return (a <= x && x <= c && b <= y && y <= d);
    }
};

struct data{
    int x, y, ind;
    data(int _x, int _y, int _ind){
        x = _x;
        y = _y;
        ind = _ind;
    }
};

int n, x, y;
lineSegment a[N];

vector <data> adj[D][D];
bool vstSeg[N], vstCell[D][D], draw[D][D];

void readInput(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> a[i].a >> a[i].b >> a[i].c >> a[i].d;
        if (a[i].a > a[i].c)
            swap(a[i].a, a[i].c);
        if (a[i].b > a[i].d)
            swap(a[i].b, a[i].d);
    }
    cin >> x >> y;
}

void dfs(int x, int y){
    if (vstCell[x][y])
        return;
    vstCell[x][y] = 1;
    for(data d : adj[x][y]){
        vstSeg[d.ind] = 1;
        dfs(d.x, d.y);
    }
}

void solve(){
    for(int i = 1; i <= n; i++){
        adj[a[i].a][a[i].b].push_back(data(a[i].c, a[i].d, i));
        adj[a[i].c][a[i].d].push_back(data(a[i].a, a[i].b, i));
    }
    for(int i = 1; i <= n; i++)
        if (a[i].contains(x, y))
            dfs(a[i].a, a[i].b);
    int minX = D, maxX = 0, minY = D, maxY = 0;
    for(int i = 1; i <= n; i++){
        if (!vstSeg[i])
            continue;
        minX = min(minX, a[i].a);
        maxX = max(maxX, a[i].c);
        minY = min(minY, a[i].b);
        maxY = max(maxY, a[i].d);

        for(int x = a[i].a; x <= a[i].c; x++)
            for(int y = a[i].b; y <= a[i].d; y++)
                draw[x][y] = 1;
    }
    for(int y = maxY; y >= minY; y--){
        for(int x = minX; x <= maxX; x++)
            cout << (draw[x][y]? '#' : '.');
        cout << '\n';
    }
}

int main(){
    if (fopen(taskname".inp", "r")){
        freopen(taskname".inp", "r", stdin);
        freopen(taskname".out", "w", stdout);
    }
    readInput();
    solve();
    return 0;
}

Compilation message

konj.cpp: In function 'int main()':
konj.cpp:91:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   91 |         freopen(taskname".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
konj.cpp:92:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   92 |         freopen(taskname".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2560 KB Output is correct
2 Correct 2 ms 2560 KB Output is correct
3 Correct 96 ms 13944 KB Output is correct
4 Correct 2 ms 2560 KB Output is correct
5 Correct 2 ms 2432 KB Output is correct
6 Correct 2 ms 2432 KB Output is correct
7 Correct 2 ms 2560 KB Output is correct
8 Correct 2 ms 2560 KB Output is correct
9 Correct 2 ms 2432 KB Output is correct
10 Correct 2 ms 2560 KB Output is correct