Submission #1369564

#TimeUsernameProblemLanguageResultExecution timeMemory
1369564edga1Migrations (IOI25_migrations)C++20
30 / 100
21 ms452 KiB
#include "migrations.h"
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define ll long long
using namespace std;

const int N=10005;
int dist[N];
int ldist=0,ldv,fur,c=0,pos=-1;
vector<int> sk;

int send_message(int n, int i, int Pi) {
    dist[i]=dist[Pi]+1;
    if(dist[i]>ldist){
        ldist=dist[i];
        ldv=i;
    }
    if(i==n-12){
        fur=ldv;
        int temp=fur;
        for(int i=0; i<4; i++){
            int last=temp%10;
            sk.pb(min(3,max(0,last)));
            last-=3;
            sk.pb(min(3,max(0,last)));
            last-=3;
            sk.pb(min(3,max(0,last)));
            temp/=10;
        }
    }
    if(i>=n-12){
        if(ldv!=fur || sk.size()==0){
            if(ldv==i) return 4;
            return 0;
        }
        pos++;
        return sk[pos];
    }
    return 0;
}

pair<int, int> longest_path(vector<int> s) {
    int n=s.size();
    int v=-1;
    for(int i=max(0,n-12); i<n; i++){
        if(s[i]==4) v=i;
    }
    if(v!=-1) return {0,v};
    int p1=0,p2=0,p3=0,p4=0;
    int p=n-1;
    while(p>=0){
        if(p>=n-3) p1+=s[p];
        else if(p>=n-6) p2+=s[p];
        else if(p>=n-9) p3+=s[p];
        else if(p>=n-12) p4+=s[p];
        else break;
        p--;
    }
    v=p1*1000+p2*100+p3*10+p4;
    return {0,v};
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...