|
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 }