#include<cstdio> #include<algorithm> #include<vector> using namespace std; typedef long long LL; typedef unsigned long long ULL; #define MAXN 10000001 #define PB push_back #define MP make_pair #define SD second #define FT first LL n,k,result; ULL a,b; vector<pair<ULL, pair<ULL,ULL> > > polany; bool uzyte[MAXN]; int main(){ scanf("%lld",&n); for(LL i=0;i<n;i++) { scanf("%llu %llu",&a,&b); polany.PB(MP(a,MP(b,a+b))); } //rozwiązanie kwadratowe sort(polany.begin(),polany.end()); /*for(LL i=0;i<n;i++) { printf("%llu %llu %llu\n",polany[i].FT,polany[i].SD.FT, polany[i].SD.SD); }*/ //printf("=======\n"); ULL maks=0; for(LL i=0;i<n;i++){ if(maks<polany[i].SD.FT) maks=polany[i].SD.FT; } printf("%llu\n",maks); int pozycja_najlepszego = 0; for(LL i=1;i<n-1;i++){ //wybierz najlepszy pozycja_najlepszego = 0; maks = 0; for(LL j=0;j<n;j++) { //printf("Porównuję %llu z %llu\n", maks, polany[j].SD.SD); if(maks<polany[j].SD.SD) { maks=polany[j].SD.SD; pozycja_najlepszego = j; } } //printf("Mam najlepszego: %lld\n",pozycja_najlepszego); //oznacz jako użyty uzyte[pozycja_najlepszego]=true; //maks z pozostałych maks = 0; for(LL j=0;j<n;j++) { if(uzyte[j] == false && maks<polany[j].SD.FT) { maks=polany[j].SD.FT; } } //printf("Maks z pozostałych: %llu\n",maks); //wylicz wartość k=1; result = 0; for(LL j=0;j<n;j++) { if(uzyte[j]) { result += polany[j].SD.SD; } } result+=maks; printf("%llu\n",result); } result=0; for(ULL j=0;j<n;j++){ result+=polany[j].SD.FT+j*polany[j].FT; } printf("%llu\n",result); 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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include<cstdio> #include<algorithm> #include<vector> using namespace std; typedef long long LL; typedef unsigned long long ULL; #define MAXN 10000001 #define PB push_back #define MP make_pair #define SD second #define FT first LL n,k,result; ULL a,b; vector<pair<ULL, pair<ULL,ULL> > > polany; bool uzyte[MAXN]; int main(){ scanf("%lld",&n); for(LL i=0;i<n;i++) { scanf("%llu %llu",&a,&b); polany.PB(MP(a,MP(b,a+b))); } //rozwiązanie kwadratowe sort(polany.begin(),polany.end()); /*for(LL i=0;i<n;i++) { printf("%llu %llu %llu\n",polany[i].FT,polany[i].SD.FT, polany[i].SD.SD); }*/ //printf("=======\n"); ULL maks=0; for(LL i=0;i<n;i++){ if(maks<polany[i].SD.FT) maks=polany[i].SD.FT; } printf("%llu\n",maks); int pozycja_najlepszego = 0; for(LL i=1;i<n-1;i++){ //wybierz najlepszy pozycja_najlepszego = 0; maks = 0; for(LL j=0;j<n;j++) { //printf("Porównuję %llu z %llu\n", maks, polany[j].SD.SD); if(maks<polany[j].SD.SD) { maks=polany[j].SD.SD; pozycja_najlepszego = j; } } //printf("Mam najlepszego: %lld\n",pozycja_najlepszego); //oznacz jako użyty uzyte[pozycja_najlepszego]=true; //maks z pozostałych maks = 0; for(LL j=0;j<n;j++) { if(uzyte[j] == false && maks<polany[j].SD.FT) { maks=polany[j].SD.FT; } } //printf("Maks z pozostałych: %llu\n",maks); //wylicz wartość k=1; result = 0; for(LL j=0;j<n;j++) { if(uzyte[j]) { result += polany[j].SD.SD; } } result+=maks; printf("%llu\n",result); } result=0; for(ULL j=0;j<n;j++){ result+=polany[j].SD.FT+j*polany[j].FT; } printf("%llu\n",result); return 0; } |