# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
968125 | berr | Popeala (CEOI16_popeala) | C++17 | 81 ms | 262144 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int N = 2e3+30;
int r[N][N];
void solve(){
int n, t, s; cin >> n >> t >> s;
vector<int> v(t);
vector<vector<array<int, 2>>> g(t+1);
vector dis(t+1, vector(s+2, (int)2e9));
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){
r[l-k][l-1]++;
}
k=0;
}
else k++;
}
if(k){
r[t-k][t-1]++;
}
}
for(int i=t; i>1; i--){
for(int l=0; l+i-1<t; l++){
r[l+1][l+i-1]+=r[l][l+i-1];
r[l][l+i-2]+=r[l][l+i-1];
}
}
for(int i=1; i<t; i++) v[i] += v[i-1];
for(int i=0; i<t; i++){
int ek=0;
if(i>0) ek=v[i-1];
for(int l=i+1; l<t; l++){
g[i].push_back({l, (v[l-1]-ek)*r[i][l-1]});
}
g[i].push_back({t, (v[t-1]-ek)*r[i][t-1]});
}
priority_queue<array<int, 3>> pq;
pq.push({0, 0, 0});
dis[0][0]=0;
while(pq.size()){
auto [cos, ed, v]= pq.top();
pq.pop();
cos*=-1;
if(cos != dis[v][ed]) continue;
for(auto [i, c]: g[v]){
if(ed+1 <= s && cos+c < dis[i][ed+1]){
dis[i][ed+1]=cos+c;
pq.push({-(cos+c), (ed+1), i});
}
}
}
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();
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |