summaryrefslogtreecommitdiff
path: root/sem_5/codingbattle/ex3/ex3.cpp
blob: 3d2d20b0843b2ad92c265070a6b6404faf7badb6 (plain)
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
94
95
96
97
98
#include <iostream>
#include <string>
#include<vector>
#include<algorithm>
using namespace std;

void printtab(int n, int tab[]);
void printvec(int n, vector<int> tab);
int main (int argc, char ** argv){
  int L,N;
  cin >> L>>N;
  int  pos[N];
  int size[N];
  for (int i =0;i < N; i ++){
    cin>>pos[i];
  }
  vector<int> ecart(N-1);//ecart entre le i eme poste et le i + 1 ieme
  int nbchapsize[19];
  for (int i =0; i < 19; i ++){
    nbchapsize[i]= 0;
  }
  int totalchap=0;
  for (int i = 0 ; i < N; i ++){
    cin>>size[i];
    if (i < N-1){
      ecart[i]=pos[i+1]-pos[i];
    }
    nbchapsize[size[i]-1]++;
    totalchap += size[i]*2;
  }


  vector<int> vraiecart(N-1);
  // cout<<"Chapeau dispos"<<endl;
  // printtab(19, nbchapsize);
  // cout<<"Ecart"<<endl;
  // printvec(N-1, ecart);

  for (int i = 0 ; i <N-1;i++){
    vraiecart[i]= max(ecart[i]%2==0?ecart[i]/2:ecart[i]/2+1,ecart[i+1]%2==0?ecart[i+1]/2:ecart[i+1]/2+1);
  }
  cout<<"Ecartreels"<<endl;
  printvec(N-1, vraiecart);
  if (totalchap < L){
    cout<<"NO"<<endl;
    return 0;
  }
  sort(vraiecart.begin(),vraiecart.begin()+N);
  bool keepgoing = true;
  bool answer= false;
  int j =N-1;
  int oldj= 0;
  int h = 0;
  while (keepgoing){
    // cout << " j : "<<j<<"h : "<<h<<endl;
    if (oldj!=j){
      h= vraiecart[j]/2;
      oldj=j;
    }
    if (h >= 20){
      answer= false;
      break;
    }
    if (j==0){
      answer=true;
      break;
    }
    if (nbchapsize[h]>0){
      j --;
      nbchapsize[h]--;
       // cout<<"- 1 chapeau de taille "<< h+1<<endl;
    }
    else {
       // cout<< "Pas de chapeau de taille "<<h+1<<endl;
      h ++;

    }
  }
  if (answer){
    cout << "YES"<<endl;
  }
  else cout<<"NO"<<endl;

  return 0;
}

void printtab(int n, int tab[]){
  for (int i = 0; i < n; i ++){
    cout <<tab[i]<<";";
  }
  cout<<endl;
}
void printvec(int n, vector<int> tab){
  for (int i = 0; i < n; i ++){
    cout <<tab[i]<<";";
  }
  cout<<endl;
}