Pitanje ili opis problema
Pokusavao sam da uradim zadatak “Abakus” sa okruznog 2016te godine sa idejom da pokusam da svaku grupu “postavim” u jedan od 10 brojeva iz intervala [0,9] i onda popravljam vrednosti, uzeo sam u obzir i mogucnost da ne treba nijednu grupu “postavljati” vec samo menjati vrednost brojeva. Medjutim, gore opisano resenje mi prolazi za samo 2 test primera (1 i 7) dok za ostale daje WA. Nisam uspeo da smislim neki test primer gde ovo ne radi, pa bih zamolio nekog da mi pomogne … ili bar da mi pokaze gde mogu da nadjem resenje, kodove takmicara sa tog takmicenja ili cak samo test primere jer nista od toga nisam uspeo da nadjem ni na petlji ni na sajtu Racunarske Gimnazije.
Link ka zadatku ili odgovarajućoj stranici
https://petlja.org/BubbleBee/r/Problems/2016-okruzno-ss-abakus
Kod:
#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > vec[1010];
int n, c1;
int p[1010],a[1010],b, m;
int ans;
int diff(int a, int b){
return min(10-max(a,b)+min(a,b), max(a,b)-min(a,b));
}
int main()
{
ios_base::sync_with_stdio(0);
cin >> n >> c1;
for(int i = 0; i < n; ++i){
cin >> p[i];
m = max(m, p[i]);
}
for(int i = 0; i < n; ++i){
cin >> a[i];
}
for(int i = 0; i < n; ++i){
cin >> b;
vec[p[i]-1].push_back({a[i], b});
}
for(int e = 0; e < m; ++e){
int tmpmin = 0;
if(!vec[e].size()) continue;
for(int i = 0; i < vec[e].size(); ++i){
tmpmin += diff(vec[e][i].first, vec[e][i].second);
}
for(int j = 0; j < 10; ++j){
int tmp = c1;
for(int i = 0; i < vec[e].size(); ++i){
tmp += diff(vec[e][i].second, j);
}
tmpmin = min(tmpmin, tmp);
}
//cout << tmpmin << ‘\n’;
ans += tmpmin;
}
cout << ans << ‘\n’;
/8 3
6 5 6 5 5 6 1 2
5 1 5 2 3 5 8 0
0 1 0 2 3 8 4 8/
return 0;
}
//kraj koda
Hvala,
Momcilo Tosic