park202210DK_ESZ_C++.cpp

  1  // https://odorpeter.hu/
  2  
  3  #include <iostream>     // cin cout
  4  #include <iomanip>      // setw()
  5  #include <map>          // "szótár" (map) adattípushoz
  6  #include <set>          // halmaz adattípushoz
  7  #include <vector>       // vektor (vector) adattípushoz
  8  #include <fstream>      // szöveges fájlok kezelése
  9  #include <algorithm>    // count
 10  
 11  using namespace std;
 12  
 13  struct park             // felajanlas.txt tartalmának megfelelõ struktúra
 14  {
 15      int kezd,vege;
 16      char szin;
 17  };
 18  struct f6               // 6. feladathoz kell ez a struktúra
 19  {
 20      char sz;            // virágágyás színe
 21      int ssz;            // felajánlás sorszáma
 22  };
 23  
 24  void F1(int &n, vector<park> &f)
 25  {
 26      ifstream fbe;
 27      fbe.open("felajanlas.txt");
 28      fbe>>n;
 29      park temp;
 30      while(fbe>>temp.kezd and fbe>>temp.vege and fbe>>temp.szin)
 31      {
 32          f.push_back(temp);
 33      }
 34      fbe.close();
 35  }
 36  
 37  void F2(vector<park> f)
 38  {
 39      cout << "2. feladat" << endl;
 40      cout << "A felajánlások száma: " << f.size() << endl;
 41  }
 42  
 43  void F3(vector<park> f)
 44  {
 45      cout << "3. feladat" << endl;
 46      cout << "A bejárat mindkét oldalán ültetõk: ";
 47      for (int i=0; i<f.size(); i++)
 48      {
 49          if(f[i].kezd>f[i].vege)         // ha a felajanlasban a kezdo szam nagyobb, mint a vege:
 50              cout << i+1 << " ";
 51      }
 52      cout << endl;
 53  }
 54  
 55  void F4(int n,vector<park> f)
 56  {
 57      set<char> szinek;
 58      char elso;
 59      int as, eltol, db=0;
 60  
 61      cout << "4. feladat" << endl;
 62      cout << "Adja meg az ágyás sorszámát! ";
 63      cin >> as;
 64      for(auto elem:f)
 65      {
 66          elem.kezd<elem.vege ? eltol=0 : eltol=n;
 67          if(elem.kezd<=as+eltol && as+eltol<=elem.vege+eltol)
 68          {
 69              db++;
 70              if(szinek.size()==0) elso=elem.szin;
 71              szinek.insert(elem.szin);
 72          }
 73      }
 74      printf("A felajánlók száma: %i\n", db);
 75      if(db>0)
 76      {
 77          printf("A virágágyás színe, ha csak az elsõ ültet: %c\n", elso);
 78          cout << "A virágágyás színei: ";
 79          for(auto elem:szinek)
 80          {
 81              cout << elem << " ";
 82          }
 83      }
 84      else
 85      {
 86          cout << "Ezt az ágyást nem ültetik be." << endl;
 87      }
 88      cout << endl;
 89  }
 90  
 91  void F5(int n, vector<park> f)
 92  {
 93      cout << "5. feladat" << endl;
 94      vector<bool> agyasok(n, false);
 95      int k, v, agyas_db=0;
 96      for(auto elem:f)
 97      {
 98          k=elem.kezd;
 99          v=elem.vege;
100          if(k<v)
101          {
102              agyas_db+=v-k+1;
103              for(int i=k-1;i<v;i++) agyasok[i]=true;
104          }
105          else
106          {
107              agyas_db+=n-k+1+v;
108              for(int i=k-1;i<n;i++) agyasok[i]=true;
109              for(int i=0;i<v;i++) agyasok[i]=true;
110          }
111      }
112      int true_db=count(agyasok.begin(),agyasok.end(),true);
113      if(true_db==n) cout << "Minden ágyás beültetésére van jelentkezõ." << endl;
114      else if(agyas_db>=n) cout << "Átszervezéssel megoldható a beültetés." << endl;
115      else cout << "A beültetés nem oldható meg." << endl;
116  }
117  
118  void F6(int n, vector<park> f)
119  {
120  
121      cout << "6. feladat" << endl;
122  
123      vector<f6> agyasok(n);
124      for(int i=0;i<n;i++)
125      {
126          agyasok[i].sz='#'; agyasok[i].ssz=0;
127      }
128      int k, v, sorszam=0;
129      for(auto elem:f)
130      {
131          sorszam++;
132          k=elem.kezd;
133          v=elem.vege;
134          if(k<v)
135          {
136              for(int i=k-1;i<v;i++)
137              {
138                  if(agyasok[i].sz=='#')
139                  {
140                      agyasok[i].sz=elem.szin;
141                      agyasok[i].ssz=sorszam;
142                  }
143              }
144          }
145          else
146          {
147              for(int i=k-1;i<n;i++)
148              {
149                  if(agyasok[i].sz=='#')
150                  {
151                      agyasok[i].sz=elem.szin;
152                      agyasok[i].ssz=sorszam;
153                  }
154              }
155              for(int i=0;i<v;i++)
156              {
157                  if(agyasok[i].sz=='#')
158                  {
159                      agyasok[i].sz=elem.szin;
160                      agyasok[i].ssz=sorszam;
161                  }
162              }
163          }
164      }
165  
166      ofstream fki;
167      fki.open("szinek.txt");
168      for(auto agyas:agyasok)
169      {
170          fki << agyas.sz << " " << agyas.ssz << endl;
171      }
172      fki.close();
173  }
174  
175  int main()
176  {
177      setlocale(LC_ALL,"");
178      //adatok
179      vector<park> felajanlas;
180      int N;
181      F1(N,felajanlas);
182      F2(felajanlas);
183      F3(felajanlas);
184      F4(N,felajanlas);
185      F5(N,felajanlas);
186      F6(N,felajanlas);
187  }