Submission #1198026

#TimeUsernameProblemLanguageResultExecution timeMemory
1198026brover29Logičari (COCI21_logicari)C++17
10 / 110
8 ms17480 KiB
#include <bits/stdc++.h>
//qwerty47924692
using namespace std;
using ll = long long;
const ll N=2e5+29;
const string br="617283";
#define sz(a)(ll)a.size()
#define f first
#define s second
ll n,dp[N][2][2][2][2],used[N],w[N],pr[N];
vector<ll>c,g[N];
void get(ll s,ll f){
    while(s!=f){
        c.push_back(s);
        s=pr[s];
    }
    c.push_back(f);
    for(ll i:c)w[i]=1;
}void dfs(ll v){
    used[v]=1;
    for(ll to:g[v]){
        if(used[to]==2)continue;
        if(used[to]==1){
            get(v,to);
            continue;
        }dfs(to);
    }
    used[v]=2;
}
//void calc(ll v,ll k=1,ll pr=0){
//    dp[v]=k;
//    k^=1;
//    for(ll to:g[v]){
//        if(to==pr||w[to])continue;
//        calc(to,k,v);
//        dp[v]+=dp[to];
//    }
//}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin>>n;
//    if(n==3){
//        cout<<-1;
//        return 0;
//    }
    for(ll i=2;i<=n;i++){
        for(ll j1=0;j1<2;j1++){
            for(ll j2=0;j2<2;j2++){
                for(ll ji=0;ji<2;ji++){
                    for(ll ji1=0;ji1<2;ji1++){
                        dp[i][j1][j2][ji][ji1]=1e18;
                    }
                }
            }
        }
    }
//    for(ll i=1;i<=n;i++){
//        ll v,u;
//        cin>>v>>u;
//        g[v].push_back(u);
//        g[u].push_back(v);
//    }
    //dfs(1);
    for(ll j1=0;j1<2;j1++){
        for(ll j2=0;j2<2;j2++){
            dp[2][j1][j2][j2][j1]=j1+j2;
        }
    }
    for(ll i=3;i<=n;i++){
        for(ll j1=0;j1<2;j1++){
            for(ll j2=0;j2<2;j2++){
                for(ll ji=0;ji<2;ji++){
                    for(ll ji1=0;ji1<2;ji1++){
                        if(i==3)ji1=j2;
                        dp[i][j1][j2][ji][ji1]=dp[i-1][j1][j2][ji1][1-ji]+ji;
                        if(i==3)break;
                    }
                }
            }
        }
    }ll ans=1e18;
    for(ll j1=0;j1<2;j1++){
        for(ll j2=0;j2<2;j2++){
            ans=min(ans,dp[n][j1][j2][1-j2][1-j1]);
            if(dp[n][j1][j2][1-j2][1-j1]==1){
               // cout<<j1<<' '<<j2<<'\n';
            }
        }
    }
    cout<<(ans==1e18 ? -1 : ans);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...