#include <iostream> using namespace std; int main(){ ios_base::sync_with_stdio(0); int n,k; cin>>n>>k; int rok[(n*(n+1))/2], ile[(n*(n+1))/2], leweile[(n*(n+1))/2], praweile[(n*(n+1))/2]; int min = 2019; int ojciec[(n*(n+1))/2]; bool leweskrajne[(n*(n+1))/2], praweskrajne[(n*(n+1))/2]; for(int i = 0; i < (n*(n+1))/2; i++){ cin>>rok[i]; ile[i] = 0; leweskrajne[i] = false; praweskrajne[i] = 0; leweile[i] = 0; praweile[i] = 0; ojciec[i] = false; } int x = 0; int j = 2; for(int i = 0; i < (n*(n+1))/2; i++){ if(i > x){ x+=j; j+=1; } if(i == x){ praweskrajne[i] = true; } if(i == x-j+2){ leweskrajne[i] = true; } ojciec[i] = j-2; // cout<<i<<" "<<ojciec[i]<<endl; } leweile[0] = 0; praweile[0] = 0; for(int i = 1; i < (n*(n+1))/2; i++){ // cout<<i-ojciec[i]<<" "<<i - ojciec[i] - 1<<endl; if(leweskrajne[i]){ leweile[i] = 0; // cout<<i<<" "<<i-ojciec[i]<<endl; praweile[i] = praweile[i-ojciec[i]]+1; } else if(praweskrajne[i]){ praweile[i] = 0; leweile[i] = leweile[i- ojciec[i]-1]+1; } else{ leweile[i] = leweile[i-ojciec[i] -1] + praweile[i-ojciec[i] -1] + 1; praweile[i] = praweile[i-ojciec[i]] + 1; } if(leweile[i] + praweile[i] + 1 <=k && min > rok[i]){ min = rok[i]; } } cout<<min; }
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 | #include <iostream> using namespace std; int main(){ ios_base::sync_with_stdio(0); int n,k; cin>>n>>k; int rok[(n*(n+1))/2], ile[(n*(n+1))/2], leweile[(n*(n+1))/2], praweile[(n*(n+1))/2]; int min = 2019; int ojciec[(n*(n+1))/2]; bool leweskrajne[(n*(n+1))/2], praweskrajne[(n*(n+1))/2]; for(int i = 0; i < (n*(n+1))/2; i++){ cin>>rok[i]; ile[i] = 0; leweskrajne[i] = false; praweskrajne[i] = 0; leweile[i] = 0; praweile[i] = 0; ojciec[i] = false; } int x = 0; int j = 2; for(int i = 0; i < (n*(n+1))/2; i++){ if(i > x){ x+=j; j+=1; } if(i == x){ praweskrajne[i] = true; } if(i == x-j+2){ leweskrajne[i] = true; } ojciec[i] = j-2; // cout<<i<<" "<<ojciec[i]<<endl; } leweile[0] = 0; praweile[0] = 0; for(int i = 1; i < (n*(n+1))/2; i++){ // cout<<i-ojciec[i]<<" "<<i - ojciec[i] - 1<<endl; if(leweskrajne[i]){ leweile[i] = 0; // cout<<i<<" "<<i-ojciec[i]<<endl; praweile[i] = praweile[i-ojciec[i]]+1; } else if(praweskrajne[i]){ praweile[i] = 0; leweile[i] = leweile[i- ojciec[i]-1]+1; } else{ leweile[i] = leweile[i-ojciec[i] -1] + praweile[i-ojciec[i] -1] + 1; praweile[i] = praweile[i-ojciec[i]] + 1; } if(leweile[i] + praweile[i] + 1 <=k && min > rok[i]){ min = rok[i]; } } cout<<min; } |