답안 #380297

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
380297 2021-03-20T22:54:02 Z Pichon5 Shortcut (IOI16_shortcut) C++17
0 / 100
1 ms 512 KB
#include "shortcut.h"
#include<bits/stdc++.h>
#define lcm(a,b) (a/__gcd(a,b))*b
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long int
#define vi vector<int>
#define vll vector<ll>
#define pb push_back
#define F first
#define S second
#define mp make_pair
//salida rapida "\n"
//DECIMALES fixed<<sp(n)<<x<<endl;
//gcd(a,b)= ax + by
//lCB x&-x
//set.erase(it) - ersases the element present at the required index//auto it = s.find(element)
//set.find(element) - iterator pointing to the given element if it is present else return pointer pointing to set.end()
//set.lower_bound(element) - iterator pointing to element greater than or equal to the given element
//set.upper_bound(element) - iterator pointing to element greater than the given element
// | ^
//__builtin_popcount(x)
using namespace std;

long long find_shortcut(int n, vi l, vi d, int c){
    int res=1e9;
    for(int i=0;i<n;i++){
        for(int L=i+1;L<n;L++){
            int diametro=0;
            for(int k=0;k<n;k++){
                vi peso(n+1,1e9);
                peso[k]=0;
                priority_queue<pair<int,int> >q;
                q.push({0,k});
                vector<bool>vis(n+1,false);
                while(!q.empty()){
                    int u=int(q.top().S);
                    q.pop();
                    if(vis[u])continue;
                    vis[u]=true;
                    if(u+1<n && peso[u+1]>peso[u]+l[u]){
                        peso[u+1]=peso[u]+l[u];
                        q.push({-peso[u+1],u+1});
                    }
                    if(u-1>=0 && peso[u-1]>peso[u]+l[u-1]){
                        peso[u-1]=peso[u]+l[u-1];
                        q.push({-peso[u-1],u-1});
                    }
                    if(i==u && peso[L]>peso[u]+c){
                        peso[L]=peso[u]+c;
                        q.push({-peso[L],L});
                    }
                    if(L==u && peso[i]>peso[u]+c){
                        peso[i]=peso[u]+c;
                        q.push({-peso[i],i});
                    }
                }
                for(int j=0;j<n;j++){
                    diametro=max(diametro,peso[j]+d[j]+d[k]);
                }
            }
            res=min(res,diametro);
        }
    }
    return res;
    //9 30 10 10 10 10 10 10 10 10 20 0 30 0 0 40 0 40 0
    //4 10 10 20 20 0 40 0 30
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 512 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 0 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Incorrect 1 ms 364 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 512 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 0 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Incorrect 1 ms 364 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 512 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 0 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Incorrect 1 ms 364 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 512 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 0 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Incorrect 1 ms 364 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 512 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 0 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Incorrect 1 ms 364 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 512 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 0 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Incorrect 1 ms 364 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 512 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 0 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Incorrect 1 ms 364 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 512 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 0 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Incorrect 1 ms 364 KB n = 2, incorrect answer: jury 62 vs contestant 72
6 Halted 0 ms 0 KB -