답안 #681786

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
681786 2023-01-14T09:48:09 Z Cross_Ratio Izvanzemaljci (COI21_izvanzemaljci) C++14
5 / 100
3000 ms 1876 KB
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int INF = 1e18;
array<int, 2> A[100005];
void subtask_1(int N) {
    int mx = -INF, ix = INF, my = -INF, iy = INF;
    int i, j;
    for(i=0;i<N;i++) {
        mx = max(mx, A[i][0]);
        ix = min(ix, A[i][0]);
        my = max(my, A[i][1]);
        iy = min(iy, A[i][1]);
    }
    cout << ix << ' ' << iy << ' ' << max(mx - ix, my - iy);
}
array<int, 3> ans[3];
void subtask_2(int N) {

}
array<int, 3> B[3];
bool in(int k, int a) {
    return B[a][0] <= A[k][0] && A[k][0] <= B[a][0] + B[a][2] && B[a][1] <= A[k][1] && A[k][1] <= B[a][1] + B[a][2];
}
int pw3[14];
void subtask_3(int N) {
    int i, j;
    pw3[0] = 1;
    for(i=1;i<=N;i++) pw3[i] = pw3[i-1] * 3;
    int mi = INF;
    for(i=0;i<pw3[N];i++) {
        vector<int> V[3];
        for(j=0;j<N;j++) {
            int k = (i / pw3[j]) % 3;
            V[k].push_back(j);
        }
        for(j=0;j<3;j++) {
            int mx = -INF, ix = INF, my = -INF, iy = INF;
            for(int k : V[j]) {
                mx = max(mx, A[k][0]);
                ix = min(ix, A[k][0]);
                my = max(my, A[k][1]);
                iy = min(iy, A[k][1]);
            }
            if(mx==-INF) B[j] = {1e9 + 2*j, 1e9 + 2*j, 1};
            else B[j] = {ix, iy, max(1LL, max(mx - ix, my - iy))};
        }
        bool isPos = true;
        for(j=0;j<3;j++) {
            set<int> S;
            for(int k = 0; k < N; k++) S.insert(k);
            for(int k : V[j]) S.erase(k);
            for(int k : S) {
                if(in(k, j)) isPos = false;
            }
        }
        int val = 0;
        for(j=0;j<3;j++) val = max(val, B[j][2]);
        if(mi > val && isPos) {
            mi = val;
            ans[0] = B[0], ans[1] = B[1], ans[2] = B[2];
        }
    }
    cout << ans[0][0] << ' ' << ans[0][1] << ' ' << ans[0][2] << '\n';
    cout << ans[1][0] << ' ' << ans[1][1] << ' ' << ans[1][2] << '\n';
    cout << ans[2][0] << ' ' << ans[2][1] << ' ' << ans[2][2] << '\n';
}
signed main() {
    cin.sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int N, K;
    cin >> N >> K;
    int i, j;
    for(i=0;i<N;i++) cin >> A[i][0] >> A[i][1];
    if(N==1) {
        cout << A[0][0] << ' ' << A[0][1] << ' ' << 1 << '\n';
        if(K>=2) cout << 1e9 + 2 << ' ' << 1e9 + 2 << ' ' << 1 << '\n';
        if(K>=3) cout << 1e9 + 4 << ' ' << 1e9 + 4 << ' ' << 1 <<'\n';
        return 0;
    }
    if(K==1) {
        subtask_1(N);
    }
    if(K==2) {
        subtask_2(N);
    }
    if(K==3) {
        subtask_3(N);
    }
}

Compilation message

izvanzemaljci.cpp: In function 'void subtask_1(long long int)':
izvanzemaljci.cpp:8:12: warning: unused variable 'j' [-Wunused-variable]
    8 |     int i, j;
      |            ^
izvanzemaljci.cpp: In function 'void subtask_3(long long int)':
izvanzemaljci.cpp:45:38: warning: narrowing conversion of '(1.0e+9 + (double)(2 * j))' from 'double' to 'long long int' [-Wnarrowing]
   45 |             if(mx==-INF) B[j] = {1e9 + 2*j, 1e9 + 2*j, 1};
      |                                  ~~~~^~~~~
izvanzemaljci.cpp:45:49: warning: narrowing conversion of '(1.0e+9 + (double)(2 * j))' from 'double' to 'long long int' [-Wnarrowing]
   45 |             if(mx==-INF) B[j] = {1e9 + 2*j, 1e9 + 2*j, 1};
      |                                             ~~~~^~~~~
izvanzemaljci.cpp: In function 'int main()':
izvanzemaljci.cpp:74:12: warning: unused variable 'j' [-Wunused-variable]
   74 |     int i, j;
      |            ^
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 21 ms 1876 KB Output is correct
8 Correct 20 ms 1876 KB Output is correct
9 Correct 20 ms 1792 KB Output is correct
10 Correct 21 ms 1876 KB Output is correct
11 Correct 24 ms 1828 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Expected integer, but "1e+09" found
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Expected integer, but "1e+09" found
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3058 ms 340 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3066 ms 340 KB Time limit exceeded
2 Halted 0 ms 0 KB -