Submission #968289

# Submission time Handle Problem Language Result Execution time Memory
968289 2024-04-23T09:36:41 Z berr Popeala (CEOI16_popeala) C++17
0 / 100
94 ms 75628 KB
#include <bits/stdc++.h>
using namespace std;
const int N = 2e4+30;

int r[N][N];
int gh[57][57];
#define int long long
void solve(){
    int n, t, s; cin >> n >> t >> s;
    vector<int> v(t);
    vector dis(t+2, vector(56, (int)1e10)) ;

    for(auto &i: v) cin >> i;

    vector<string> se(n);

    for(auto &i: se){
        cin >> i;
        int k=i[0]-'0';

        for(int l=1; l<t; l++){
            if(i[l]=='0'){
                if(k)
                for(int j=l-k; j<l; j++){
                    for(int g=j; g<l; g++){
                        r[j][g]++;
                    }
                }
                k=0;
            }
            else k++;
        }

        if(k){
            for(int j=t-k; j<t; j++){
                for(int g=j; g<t; g++){
                    r[j][g]++;
                }
            }        
        }
    } 

    for(int i=1; i<t; i++) v[i] += v[i-1];

    set<int> upd[t];

    for(int i=0; i<n; i++){
        int k=0;
        for(int l=0; l<t; l++){
            if(se[i][l]=='0'){
                for(int j=l-k; j<l; j++)
                    upd[l].insert(j);
                k = 0;
            }
            else k++;
        }
    }

    for(int i=0; i<55; i++){
        for(int l=0; l<55; l++){
            gh[i][l]=-1;
        }
    }
    int h=0;
    for(auto i=0; i<t; i++){
        h+=upd[i].size();
    }

  //  assert((h < 55*t));
    gh[0][0]=0;
    dis[0][0]=0;

    auto calc=[&](int ri, int l, int f){

        if(dis[l][f]==1e10) return (int)1e10;
        int h = dis[l][f];
        int gh = v[ri];
        if(l) gh-=v[l-1];
        int kac = r[l][ri];

        return h+kac*gh;
    };

    for(int i=0; i<=t; i++){
        //hah;

        for(int j=0; j<54; j++){
            for(int el=0; el<54; el++){
                if(gh[j][el]!=-1){
                    if(i!=0)
                    dis[i][j+1] = min(dis[i][j+1], calc(i-1, gh[j][el], j));
                    if(i!=t)
                    upd[i].insert(gh[j][el]);
                    gh[j][el] = -1;
                }
            }
        }
        if(i<t)
        upd[i].insert(i);
        if(i<t)
        for(auto l: upd[i]){
            if(l<0) continue;
            int el = r[l][i];// kaç tane
            if(el >n)break;

            for(int k=0; k<s; k++){
                if(gh[k][el]==-1) gh[k][el]=l;
                else{
                    int val_new = calc(i, l, k);
                    int val_old = calc(i, gh[k][el], k);


                    ///cout<<val_new<<" "<<val_old<<"\n";
                    if(val_new < val_old){
                        //gh[k][el] = l;  
                    }
                }
            }
        }
    }

    for(int i=1; i<=s; i++) cout<<dis[t][i]<<"\n";
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    /*freopen("popeala.in", "r", stdin);
    freopen("popeala.out", "w", stdout);
*/
    solve();
}
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 29 ms 40980 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 94 ms 75628 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -