답안 #425492

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
425492 2021-06-13T05:52:00 Z ngrace Shortcut (IOI16_shortcut) C++14
0 / 100
1 ms 292 KB
#include "shortcut.h"
#include <vector>
#include <queue>
#include <utility>
#include <iostream>
#include <limits.h>
#include <algorithm>
using namespace std;
#define v vector
#define pii pair<int,int>
#define fi first
#define se second
#define pq priority_queue

long long find_shortcut(int n, std::vector<int> l, std::vector<int> d, int c)
{
    v<v<long long>> adj(n,v<long long>(n, LLONG_MAX));
    for(int i=0;i<n-1;i++){
        adj[i][i+1] = l[i];
        adj[i+1][i] = l[i];
        adj[i][i]=0;
    }
    adj[n-1][n-1]=0;
    for(int i=0;i<n-1;i++){
        for(int j=i+2;j<n;j++){
            adj[i][j] = adj[i][j-1]+adj[j-1][j];
            adj[j][i] = adj[i][j];
        }
    }

    long long out=0;
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            long long dist=adj[i][j]+d[i]+d[j];
            if(dist>out) out=dist;
        }
    }

    v<long long> left(n,0);
    left[0]=d[0];
    for(int i=1;i<n;i++){
        left[i]=d[i];
        if(left[i-1]+l[i-1]>left[i]) left[i]=left[i-1]+l[i-1];
    }
    v<long long> right(n,0);
    right[n-1]=d[n-1];
    for(int i=n-2;i>=0;i--){
        right[i]=d[i];
        if(right[i+1]+l[i]>right[i]) right[i]=right[i+1]+l[i];
    }

    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(adj[i][j]<=c) continue;
            long long diam=0;

            long long through = left[i]+right[j]+c;
            diam=through;
            if(diam>out) continue;

            long long allLeft=d[i]+((i==0)?0:l[i-1]+left[i-1]);
            long long allRight=d[j]+((j==n-1)?0:l[j]+right[j+1]);
            if(allLeft>diam) diam=allLeft;
            if(allRight>diam) diam=allRight;
            if(diam>out) continue;
            

            for(int a=i;a<j;a++){
                long long toR = d[a] + adj[a][j] + c + left[i];
                long long toRNorm = d[a] + adj[a][i]+left[i];
                if(toRNorm<toR) toR=toRNorm;

                long long toL = adj[a][i]+d[i]+c+right[j];
                long long toLNorm = d[a] + adj[a][j]+right[j];
                if(toLNorm<toL) toL=toLNorm;

                if(toR>diam && a!=i) diam=toR;
                if(toL>diam && a!=j) diam=toL;
                if(diam>out) break;
            }

            if(diam>out) continue;

            for(int a=i;a<=j;a++){
                for(int b=i+1;b<=j;b++){
                    long long dist= adj[a][b]+d[a]+d[b];
                    long long dist2= d[a] + adj[a][i] + adj[b][j] + d[b] +c;
                    long long dist3= d[a] + adj[a][j] + adj[b][i] + d[b] +c;

                    if(dist2<dist) dist=dist2;
                    if(dist3<dist) dist=dist3;
                    if(dist>diam) diam=dist;
                    if(diam>out) break;
                }
            }
            if(diam<out){
                out=diam;
            }
        }
    }

    return out;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB n = 4, 80 is a correct answer
2 Correct 1 ms 204 KB n = 9, 110 is a correct answer
3 Correct 1 ms 204 KB n = 4, 21 is a correct answer
4 Correct 1 ms 204 KB n = 3, 4 is a correct answer
5 Correct 1 ms 204 KB n = 2, 62 is a correct answer
6 Correct 1 ms 204 KB n = 2, 3 is a correct answer
7 Correct 1 ms 204 KB n = 3, 29 is a correct answer
8 Correct 1 ms 204 KB n = 2, 3 is a correct answer
9 Correct 1 ms 204 KB n = 2, 3 is a correct answer
10 Correct 1 ms 292 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 204 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 288 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 204 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 224 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 204 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 224 KB n = 5, 4000000000 is a correct answer
17 Incorrect 1 ms 204 KB n = 10, incorrect answer: jury 1000000343 vs contestant 1000000360
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB n = 4, 80 is a correct answer
2 Correct 1 ms 204 KB n = 9, 110 is a correct answer
3 Correct 1 ms 204 KB n = 4, 21 is a correct answer
4 Correct 1 ms 204 KB n = 3, 4 is a correct answer
5 Correct 1 ms 204 KB n = 2, 62 is a correct answer
6 Correct 1 ms 204 KB n = 2, 3 is a correct answer
7 Correct 1 ms 204 KB n = 3, 29 is a correct answer
8 Correct 1 ms 204 KB n = 2, 3 is a correct answer
9 Correct 1 ms 204 KB n = 2, 3 is a correct answer
10 Correct 1 ms 292 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 204 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 288 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 204 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 224 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 204 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 224 KB n = 5, 4000000000 is a correct answer
17 Incorrect 1 ms 204 KB n = 10, incorrect answer: jury 1000000343 vs contestant 1000000360
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB n = 4, 80 is a correct answer
2 Correct 1 ms 204 KB n = 9, 110 is a correct answer
3 Correct 1 ms 204 KB n = 4, 21 is a correct answer
4 Correct 1 ms 204 KB n = 3, 4 is a correct answer
5 Correct 1 ms 204 KB n = 2, 62 is a correct answer
6 Correct 1 ms 204 KB n = 2, 3 is a correct answer
7 Correct 1 ms 204 KB n = 3, 29 is a correct answer
8 Correct 1 ms 204 KB n = 2, 3 is a correct answer
9 Correct 1 ms 204 KB n = 2, 3 is a correct answer
10 Correct 1 ms 292 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 204 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 288 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 204 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 224 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 204 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 224 KB n = 5, 4000000000 is a correct answer
17 Incorrect 1 ms 204 KB n = 10, incorrect answer: jury 1000000343 vs contestant 1000000360
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB n = 4, 80 is a correct answer
2 Correct 1 ms 204 KB n = 9, 110 is a correct answer
3 Correct 1 ms 204 KB n = 4, 21 is a correct answer
4 Correct 1 ms 204 KB n = 3, 4 is a correct answer
5 Correct 1 ms 204 KB n = 2, 62 is a correct answer
6 Correct 1 ms 204 KB n = 2, 3 is a correct answer
7 Correct 1 ms 204 KB n = 3, 29 is a correct answer
8 Correct 1 ms 204 KB n = 2, 3 is a correct answer
9 Correct 1 ms 204 KB n = 2, 3 is a correct answer
10 Correct 1 ms 292 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 204 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 288 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 204 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 224 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 204 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 224 KB n = 5, 4000000000 is a correct answer
17 Incorrect 1 ms 204 KB n = 10, incorrect answer: jury 1000000343 vs contestant 1000000360
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB n = 4, 80 is a correct answer
2 Correct 1 ms 204 KB n = 9, 110 is a correct answer
3 Correct 1 ms 204 KB n = 4, 21 is a correct answer
4 Correct 1 ms 204 KB n = 3, 4 is a correct answer
5 Correct 1 ms 204 KB n = 2, 62 is a correct answer
6 Correct 1 ms 204 KB n = 2, 3 is a correct answer
7 Correct 1 ms 204 KB n = 3, 29 is a correct answer
8 Correct 1 ms 204 KB n = 2, 3 is a correct answer
9 Correct 1 ms 204 KB n = 2, 3 is a correct answer
10 Correct 1 ms 292 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 204 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 288 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 204 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 224 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 204 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 224 KB n = 5, 4000000000 is a correct answer
17 Incorrect 1 ms 204 KB n = 10, incorrect answer: jury 1000000343 vs contestant 1000000360
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB n = 4, 80 is a correct answer
2 Correct 1 ms 204 KB n = 9, 110 is a correct answer
3 Correct 1 ms 204 KB n = 4, 21 is a correct answer
4 Correct 1 ms 204 KB n = 3, 4 is a correct answer
5 Correct 1 ms 204 KB n = 2, 62 is a correct answer
6 Correct 1 ms 204 KB n = 2, 3 is a correct answer
7 Correct 1 ms 204 KB n = 3, 29 is a correct answer
8 Correct 1 ms 204 KB n = 2, 3 is a correct answer
9 Correct 1 ms 204 KB n = 2, 3 is a correct answer
10 Correct 1 ms 292 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 204 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 288 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 204 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 224 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 204 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 224 KB n = 5, 4000000000 is a correct answer
17 Incorrect 1 ms 204 KB n = 10, incorrect answer: jury 1000000343 vs contestant 1000000360
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB n = 4, 80 is a correct answer
2 Correct 1 ms 204 KB n = 9, 110 is a correct answer
3 Correct 1 ms 204 KB n = 4, 21 is a correct answer
4 Correct 1 ms 204 KB n = 3, 4 is a correct answer
5 Correct 1 ms 204 KB n = 2, 62 is a correct answer
6 Correct 1 ms 204 KB n = 2, 3 is a correct answer
7 Correct 1 ms 204 KB n = 3, 29 is a correct answer
8 Correct 1 ms 204 KB n = 2, 3 is a correct answer
9 Correct 1 ms 204 KB n = 2, 3 is a correct answer
10 Correct 1 ms 292 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 204 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 288 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 204 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 224 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 204 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 224 KB n = 5, 4000000000 is a correct answer
17 Incorrect 1 ms 204 KB n = 10, incorrect answer: jury 1000000343 vs contestant 1000000360
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB n = 4, 80 is a correct answer
2 Correct 1 ms 204 KB n = 9, 110 is a correct answer
3 Correct 1 ms 204 KB n = 4, 21 is a correct answer
4 Correct 1 ms 204 KB n = 3, 4 is a correct answer
5 Correct 1 ms 204 KB n = 2, 62 is a correct answer
6 Correct 1 ms 204 KB n = 2, 3 is a correct answer
7 Correct 1 ms 204 KB n = 3, 29 is a correct answer
8 Correct 1 ms 204 KB n = 2, 3 is a correct answer
9 Correct 1 ms 204 KB n = 2, 3 is a correct answer
10 Correct 1 ms 292 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 204 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 288 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 204 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 224 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 204 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 224 KB n = 5, 4000000000 is a correct answer
17 Incorrect 1 ms 204 KB n = 10, incorrect answer: jury 1000000343 vs contestant 1000000360
18 Halted 0 ms 0 KB -