Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ID: hepic
- PROG: sabotage
- LANG: C++11
- */
- #include <bits/stdc++.h>
- #define FOR(i, a, b) for(auto i=a; i<=b; ++i)
- #define REP(i, a, b) for(auto i=a; i<b; ++i)
- #define FORI(i, a, b) for(auto i=a; i!=b+1-2*(a>b); i+=1-2*(a>b))
- #define REPI(i, a, b) for(auto i=a-(a>b); i!=b-(a>b); i+=1-2*(a>b))
- #define ALL(v) v.begin(),v.end()
- #define mp(a, b) make_pair(a, b)
- #define pb(a) push_back(a)
- #define pf(a) push_front(a)
- #define eb(a, b) emplace_back(a, b)
- #define fir first
- #define sec second
- #define what_is(x) cout<<#x<<" is "<<x<<endl;
- #define type(x) typeid(x).name()
- #define ms(arr, val) memset(arr, val, sizeof(arr))
- #define min3(a,b,c) min(min(a,b),c)
- #define max3(a,b,c) max(max(a,b),c)
- #define PI acos(-1)
- #define open_read1 freopen("a.txt", "r", stdin)
- #define open_write1 freopen("b.xt", "w", stdout)
- #define open_read freopen("sort.in", "r", stdin)
- #define open_write freopen("sort.out", "w", stdout)
- using namespace std;
- typedef long long LL;
- typedef long double LD;
- typedef unsigned long long ULL;
- typedef pair<double, double> PDD;
- typedef pair<int, int> PII;
- typedef pair<int, PII> PIPII;
- typedef pair<PII, PII> PPIIPII;
- typedef pair<LL, LL> PLL;
- typedef pair<ULL, ULL> PUU;
- typedef pair<LL, PLL> PLPLL;
- typedef pair<PLL, PLL> PPLLPLL;
- typedef pair<int, LL> PIL;
- typedef pair<LL, int> PLI;
- template<typename T, typename T1>
- ostream& operator << (ostream &out, pair<T, T1> obj)
- {
- out << "(" << obj.first << ", " << obj.second << ")";
- return out;
- }
- template<typename T, typename T1>
- ostream& operator << (ostream &out, map<T, T1> cont)
- {
- typename map<T, T1>::const_iterator itr = cont.begin();
- typename map<T, T1>::const_iterator ends = cont.end();
- for(; itr!=ends; ++itr)
- out<<*itr<<" ";
- out<<endl;
- return out;
- }
- template<typename T>
- ostream& operator << (ostream &out, set<T> cont)
- {
- typename set<T>::const_iterator itr = cont.begin();
- typename set<T>::const_iterator ends = cont.end();
- for(; itr!=ends; ++itr)
- out<<*itr<<" ";
- out<<endl;
- return out;
- }
- template<typename T>
- ostream& operator << (ostream &out, multiset<T> cont)
- {
- typename multiset<T>::const_iterator itr = cont.begin();
- typename multiset<T>::const_iterator ends = cont.end();
- for(; itr!=ends; ++itr)
- out<<*itr<<" ";
- out<<endl;
- return out;
- }
- template<typename T, template<typename ELEM, typename ALLOC=allocator<ELEM>> class CONT>
- ostream& operator << (ostream &out, CONT<T> cont)
- {
- typename CONT<T>::const_iterator itr = cont.begin();
- typename CONT<T>::const_iterator ends = cont.end();
- for(; itr!=ends; ++itr)
- out<<*itr<<" ";
- out<<endl;
- return out;
- }
- template<typename T, unsigned int N, typename CTy, typename CTr>
- typename enable_if<!is_same<T, char>::value, basic_ostream<CTy, CTr> &>::type
- operator << (basic_ostream<CTy, CTr> &out, const T (&arr)[N])
- {
- REP(i, 0, N)
- out<<arr[i]<<" ";
- out<<endl;
- return out;
- }
- template<typename T>
- T gcd(T a, T b)
- {
- T min_v = min(a, b);
- T max_v = max(a, b);
- while(min_v)
- {
- T temp = max_v % min_v;
- max_v = min_v;
- min_v = temp;
- }
- return max_v;
- }
- template<typename T>
- T lcm(T a, T b)
- {
- return (a*b) / gcd(a, b);
- }
- template<typename T>
- T fast_exp_pow(T base, T exp, T mod)
- {
- T res = 1;
- while(exp)
- {
- if(exp&1)
- {
- res *= base;
- res %= mod;
- }
- exp >>= 1;
- base *= base;
- base %= mod;
- }
- return res % mod;
- }
- /*#################################################################################################################
- #################################################################################################################
- ################################################################################################################
- #################################################################################################################*/
- #define SIZE 300
- int T, N, L, answer;
- int votes[SIZE];
- bool counted[SIZE];
- vector<int> goodNums;
- priority_queue<PII, vector<PII>, greater<PII>> changeNums;
- void initialize() {
- while (!changeNums.empty()) {
- changeNums.pop();
- }
- goodNums.clear();
- ms(counted, false);
- answer = 0;
- }
- int toRound(int value) {
- if ((value * 1000) % N == 0) {
- return value * 100 / N;
- }
- if ((value * 1000 / N) % 10 >= 5) {
- return value * 100 / N + 1;
- }
- return value * 100 / N;
- }
- int main() {
- scanf("%d", &T);
- FOR (t, 1, T) {
- initialize();
- scanf("%d%d", &N, &L);
- FOR (i, 1, N) {
- if ((i * 1000 / N) % 10 >= 5) {
- goodNums.pb(i);
- }
- }
- //cout << goodNums << endl;
- int rest = N;
- REP (i, 0, L) {
- scanf("%d", votes + i);
- auto itr = lower_bound(ALL(goodNums), votes[i]);
- if (*itr == votes[i]) {
- answer += toRound(votes[i]);
- counted[i] = true;
- } else {
- changeNums.push(mp(*itr - votes[i], i));
- }
- rest -= votes[i];
- }
- FOR (i, 1, rest) {
- changeNums.push(mp(*goodNums.begin(), -1));
- }
- while(!changeNums.empty() && rest) {
- PII elem = changeNums.top();
- changeNums.pop();
- int temp = min(rest, elem.fir);
- if (elem.sec == -1) {
- answer += toRound(temp);
- } else {
- votes[elem.sec] += temp;
- }
- rest -= temp;
- }
- REP (i, 0, L) {
- if (!counted[i]) {
- answer += toRound(votes[i]);
- }
- }
- printf("Case #%d: %d\n", t, answer);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement