Submission #1158085

#TimeUsernameProblemLanguageResultExecution timeMemory
1158085InvMODCatfish Farm (IOI22_fish)C++20
9 / 100
48 ms7240 KiB
#include<bits/stdc++.h>

//#define name "InvMOD"
#ifndef name
    #include "fish.h"
#endif // name

using namespace std;

#define fi first
#define se second

//#define int long long
#define sz(v) (int)(v).size()
#define all(v) (v).begin(), (v).end()

using ll = long long;

namespace Subtask1{
    bool ckSub(vector<int>& X){
        for(int i = 0; i < sz(X); i++){
            if(X[i] & 1) return false;
        }
        return true;
    }

    ll process(vector<int>& W){
        ll answer = 0;
        for(int i = 0; i < sz(W); i++){
            answer += W[i];
        }
        return answer;
    }
}

namespace Subtask2{
    bool ckSub(vector<int>& X){
        for(int i = 0; i < sz(X); i++){
            if(X[i] > 1) return false;
        }
        return true;
    }

    ll process(int n, vector<int>& X, vector<int>& Y, vector<int>& W){
        vector<vector<int>> row(2, vector<int>(n + 1));

        vector<ll> sum(2, 0);
        for(int i = 0; i < sz(X); i++){
            row[X[i]][Y[i] + 1] = W[i];
            sum[X[i]] += 1ll * W[i];
        }

        ll answer = max(sum[0], sum[1]), pref = 0;
        if(n > 2){
            for(int i = 1; i <= n; i++){
                pref += row[0][i];
                sum[1] -= row[1][i];

                answer = max(answer, pref + sum[1]);
            }
        }
        return answer;
    }
}

ll max_weights(int n, int m, vector<int> X, vector<int> Y, vector<int> W){

    if(Subtask1::ckSub(X)){
        return Subtask1::process(W);
    }

    if(Subtask2::ckSub(X)){
        return Subtask2::process(n, X, Y, W);
    }

    return 0;
}

#ifdef name
    int32_t main(){
        freopen(name".INP", "r", stdin);
        freopen(name".OUT", "w", stdout);

        int n,m; cin >> n >> m;

        vector<int> X(m), Y(m), W(m);

        for(int i = 0; i < m; i++){
            cin >> X[i];
        }
        for(int i = 0; i < m; i++){
            cin >> Y[i];
        }
        for(int i = 0; i < m; i++){
            cin >> W[i];
        }

        cout << max_weights(n, m, X, Y, W) << "\n";

        return 0;
    }
#endif // name
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...