#include<stdio.h> #include<stdlib.h> int main(int argc, char** argv) { int n; int* bucket=(int*)malloc(sizeof(int)*1001); for(int i=0;i<=1000;++i) bucket[i]=0; // wczytujemy dane kubelkow wg. nominalow scanf("%d",&n); for(int i=0;i<n;++i) { int v; scanf("%d",&v); bucket[v]++; } // sumujemy kubelki tak, aby suma byla parzysta int sum=0; int last=0; // ostatni nieparzysty - do wykorzystania for(int i=1000;i>0;--i) { // od najwiekszych nominalow int val=bucket[i]; if(val==0) continue; // nie ma banknotow tego nominalu, to pomijamy if(i&1) { // gdy nieparzysty nominal if(last) { // gdy mamy jakas pozostalosc, to w pierszej kolejnosci z niej korzystamy, bo jest wyzszego nominalu if(val&1) { // gdy nieparzysta ilosc danego nominalu sum+=i*val+last; // to dodajemy wszystkie i wykorzystujemy pozostaly, tym samym suma nadal jest parzysta last=0; } else { // gdy nieparzysta ilosc danego nominalu, to jeden przejdzie dalej sum+=i*(val-1)+last; last=i; } } else { // gdy nie pozostalego banknotu if(val&1) { sum+=i*(val-1); last=i; // jeden pozostaje } else { // gdy parzysta ilosc to uzywamy wszystkie sum+=i*val; } } } else { // gdy parzyste sum+=i*val; // dodajemy tyle ile jest danego nominalu, bo suma bedzie i tak bedzie parzysta i nie zmienia parzystosci } } if(sum==0) printf("NIESTETY\n"); else printf("%d\n",sum); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include<stdio.h> #include<stdlib.h> int main(int argc, char** argv) { int n; int* bucket=(int*)malloc(sizeof(int)*1001); for(int i=0;i<=1000;++i) bucket[i]=0; // wczytujemy dane kubelkow wg. nominalow scanf("%d",&n); for(int i=0;i<n;++i) { int v; scanf("%d",&v); bucket[v]++; } // sumujemy kubelki tak, aby suma byla parzysta int sum=0; int last=0; // ostatni nieparzysty - do wykorzystania for(int i=1000;i>0;--i) { // od najwiekszych nominalow int val=bucket[i]; if(val==0) continue; // nie ma banknotow tego nominalu, to pomijamy if(i&1) { // gdy nieparzysty nominal if(last) { // gdy mamy jakas pozostalosc, to w pierszej kolejnosci z niej korzystamy, bo jest wyzszego nominalu if(val&1) { // gdy nieparzysta ilosc danego nominalu sum+=i*val+last; // to dodajemy wszystkie i wykorzystujemy pozostaly, tym samym suma nadal jest parzysta last=0; } else { // gdy nieparzysta ilosc danego nominalu, to jeden przejdzie dalej sum+=i*(val-1)+last; last=i; } } else { // gdy nie pozostalego banknotu if(val&1) { sum+=i*(val-1); last=i; // jeden pozostaje } else { // gdy parzysta ilosc to uzywamy wszystkie sum+=i*val; } } } else { // gdy parzyste sum+=i*val; // dodajemy tyle ile jest danego nominalu, bo suma bedzie i tak bedzie parzysta i nie zmienia parzystosci } } if(sum==0) printf("NIESTETY\n"); else printf("%d\n",sum); return 0; } |