#include <iostream>
#include <list>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main(int argc, char** argv) {
long n, i;
long funkcja;
double mediana, mediana_pom;
long poczatek, koniec, srodek_lewa, srodek_prawa, srodek;
long ileMozliwosci=0;
long *tab;
cin >> n;
tab = new long[n];
for(i=0; i<n; i++){
cin >> tab[i];
if(tab[i]==n) {
srodek_lewa = i;
srodek_prawa = i;
}
}
funkcja = 1+2*n;
mediana = (double)(1+n)/2 -0.1; // 0.1 aby porownywanie <= mediany dzialalo pewnie
//sprawdzanie poczatku - pokazuje na wyraz, ktory juz nie mozna usunac
mediana_pom=mediana;
poczatek=0;
i=0;
while(tab[i]<mediana_pom && i<n){
poczatek++;
mediana_pom+=0.5;
i++;
}
//sprawdzanie konca - pokazuje na wyraz, ktory juz nie mozna usunac
mediana_pom=mediana;
koniec=n-1;
i=n-1;
while(tab[i]<mediana_pom && i>=0){
koniec--;
mediana_pom+=0.5;
i--;
}
// cout << "srodek_prawa przed zmiana: "<<srodek_prawa <<endl;
// cout << "sl: "<<srodek_lewa << " po: "<<poczatek << " sp: "<<srodek_prawa <<" koniec: "<<koniec<< " n: "<< n<<endl;
if(srodek_lewa<poczatek || srodek_prawa>koniec || poczatek>=koniec){
// cout <<"kuku\n";
// cout << "sl: "<<srodek_lewa << " po: "<<poczatek << " sp: "<<srodek_prawa <<" koniec: "<<koniec<< " n: "<< n<<endl;
srodek=0;
}
else{
//sprawdzanie srodka prawa
mediana_pom=mediana;
i=srodek_prawa;
while(tab[i]>mediana_pom && i<n){
srodek_prawa++;
mediana_pom+=0.5;
i++;
// cout <<"sp++ " << srodek_prawa<<" medpom: "<<mediana_pom<<endl;
}
//sprawdzenie srodka lewa
mediana_pom=mediana;
i=srodek_lewa;
while(tab[i]>mediana_pom && i>=0){
srodek_lewa--;
mediana_pom+=0.5;
i--;
// cout <<"sl-- " << srodek_lewa<<" medpom: "<<mediana_pom<<endl;
}
// cout << "srodek_prawa: "<<srodek_prawa << " srodek_lewa: "<< srodek_lewa<<endl;
//srodek lewy i prawy to sa pierwsze niemozliwe
srodek = srodek_prawa-srodek_lewa-1;
}
if(poczatek==n) poczatek--;
koniec = n-koniec-1; // ile na koncu
if(koniec==n) koniec--;
// cout << "poczatek: "<< poczatek << " koniec: "<< koniec << " srodek: "<< srodek << endl;
ileMozliwosci = (poczatek+1)*(koniec+1) ;
if(poczatek+koniec+srodek>n)
srodek = n-poczatek-koniec;
ileMozliwosci+=srodek;
if(n==1) cout << funkcja << " 1"<<endl;
else cout << funkcja << " " << ileMozliwosci << endl;
delete tab;
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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | #include <iostream> #include <list> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; int main(int argc, char** argv) { long n, i; long funkcja; double mediana, mediana_pom; long poczatek, koniec, srodek_lewa, srodek_prawa, srodek; long ileMozliwosci=0; long *tab; cin >> n; tab = new long[n]; for(i=0; i<n; i++){ cin >> tab[i]; if(tab[i]==n) { srodek_lewa = i; srodek_prawa = i; } } funkcja = 1+2*n; mediana = (double)(1+n)/2 -0.1; // 0.1 aby porownywanie <= mediany dzialalo pewnie //sprawdzanie poczatku - pokazuje na wyraz, ktory juz nie mozna usunac mediana_pom=mediana; poczatek=0; i=0; while(tab[i]<mediana_pom && i<n){ poczatek++; mediana_pom+=0.5; i++; } //sprawdzanie konca - pokazuje na wyraz, ktory juz nie mozna usunac mediana_pom=mediana; koniec=n-1; i=n-1; while(tab[i]<mediana_pom && i>=0){ koniec--; mediana_pom+=0.5; i--; } // cout << "srodek_prawa przed zmiana: "<<srodek_prawa <<endl; // cout << "sl: "<<srodek_lewa << " po: "<<poczatek << " sp: "<<srodek_prawa <<" koniec: "<<koniec<< " n: "<< n<<endl; if(srodek_lewa<poczatek || srodek_prawa>koniec || poczatek>=koniec){ // cout <<"kuku\n"; // cout << "sl: "<<srodek_lewa << " po: "<<poczatek << " sp: "<<srodek_prawa <<" koniec: "<<koniec<< " n: "<< n<<endl; srodek=0; } else{ //sprawdzanie srodka prawa mediana_pom=mediana; i=srodek_prawa; while(tab[i]>mediana_pom && i<n){ srodek_prawa++; mediana_pom+=0.5; i++; // cout <<"sp++ " << srodek_prawa<<" medpom: "<<mediana_pom<<endl; } //sprawdzenie srodka lewa mediana_pom=mediana; i=srodek_lewa; while(tab[i]>mediana_pom && i>=0){ srodek_lewa--; mediana_pom+=0.5; i--; // cout <<"sl-- " << srodek_lewa<<" medpom: "<<mediana_pom<<endl; } // cout << "srodek_prawa: "<<srodek_prawa << " srodek_lewa: "<< srodek_lewa<<endl; //srodek lewy i prawy to sa pierwsze niemozliwe srodek = srodek_prawa-srodek_lewa-1; } if(poczatek==n) poczatek--; koniec = n-koniec-1; // ile na koncu if(koniec==n) koniec--; // cout << "poczatek: "<< poczatek << " koniec: "<< koniec << " srodek: "<< srodek << endl; ileMozliwosci = (poczatek+1)*(koniec+1) ; if(poczatek+koniec+srodek>n) srodek = n-poczatek-koniec; ileMozliwosci+=srodek; if(n==1) cout << funkcja << " 1"<<endl; else cout << funkcja << " " << ileMozliwosci << endl; delete tab; return 0; } |
English