#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; } |
English