1 | #include <bits/stdc++.h> |
2 | #define ll long long |
3 | #define h first |
4 | #define m second.first |
5 | #define s second.second |
6 | #define Time pair<int,pair<int,int>> |
7 | |
8 | using namespace std; |
9 | |
10 | int main() { |
11 | |
12 | Time ta, tb; |
13 | cin >> ta.h >> ta.m >> ta.s; |
14 | cin >> tb.h >> tb.m >> tb.s; |
15 | if (ta > tb) { |
16 | cout << "YES"; |
17 | } else { |
18 | cout << "NO"; |
19 | } |
20 | return 0; |
21 | } |
22 | |
23 | |
24 | |
25 | 1. Библиотеки |
26 | 2. Переменные |
27 | 3. int - 32 bits, 0 - sign, 31 bits => [0; 2^31-1] => ~ [-2*10^9; 2*10^9] |
28 | 4. Оператор присваивания |
29 | int x = 17; |
30 | int y = x + 3; |
31 | int z = 0; |
32 | z = x + y; |
33 | x + y = z; --- нельзя |
34 | |
35 | int a = 7, b = 3; |
36 | a += b; => a = a + b; // a = 10 |
37 | a -= b; => a = a - b; // a = 7 |
38 | a *= b; => a = a * b; // a = 21 |
39 | a /= b; => a = a / b; // a = 7 |
40 | a %= b; => a = a % b; // a = 1 |
41 | |
42 | Increments => Post a++, Pre ++a; |
43 | |
44 | for (int i = 0; i < n; ++i) или for (int i = 0; i < n; i++) --- разницы нет |
45 | |
46 | Decrements => Post a--, Pre --a; |
47 | |
48 | int a, b, c; |
49 | a = b = c = -1; |
50 | 5. Ариметические операторы |
51 | +, -, *, /, % |
52 | Деление => целочисленное и вещественное |
53 | целочисленное происходит между целыми числами |
54 | int a = 9, b = 2; |
55 | cout << a / b; => 4 |
56 | |
57 | вешественное просходит когда один из операндов вещественное число |
58 | int a = 9; |
59 | cout << a / 2.0; => 4.5 |
60 | int b = 2; |
61 | cout << double(a) / b; => 4.5 |
62 | cout << (a + 0.0) / b; |
63 | cout << 1.0 * a / b; |
64 | cout << double(a / b) ? --- неправильно посчитается |
65 | 6. Типы данных |
66 | Числовые |
67 | целые |
68 | - int - 32 bits = 4B -> [-2^31+1; 2^31-1] => ~ [-2*10^9; 2*10^9] |
69 | - long long - 64 bits = 8B -> [-2^63+1; 2^63-1] => ~ [-8*10^18; +8*10^18] |
70 | 2^10 ~ 10^3 |
71 | (2^10)^6 ~ (10^3)^6 => 2^60 ~ 10^18 |
72 | 8 * 2^60 ~ 8 * 10^18 |
73 | Например, создадим массив на 10^6 элементов с типом long long, сколько памяти будет занимать массив? |
74 | 10^6 * 8B = 8 MB |
75 | |
76 | 10^3 ~ 1K |
77 | 10^6 ~ 1M |
78 | 10^9 ~ 1G |
79 | 10^12 ~ 1T |
80 | - short - 16 bits = 2B -> [-2^15+1; +2^15-1] => ~ [-32000; 32000]; |
81 | - unsigned - беззнаковый |
82 | - unsigned short x; -> [0; +2^16-1] => ~ [0; 64000] |
83 | - unsigned int x; -> [0; +2^32-1] => ~ [0; 4*10^9] [-2147483648; 2147483647] |
84 | - unsigned long long x; -> [0; +2^64-1] => ~ [0; 1.6 * 10^19] |
85 | - Подводные при работы |
86 | - При смещивании беззнаковых с знаковыми |
87 | unsigned int x = -1; |
88 | cout << x; |
89 | На экран выйдет 4294967295 |
90 | - Переполнение |
91 | int a = 100000, b = 100000; |
92 | cout << a * b; |
93 | На экран выйдет 1410065408, неправильный результат |
94 | Так как int * int = int, поэтому один из операндов |
95 | должен быть с типом long long, если результат не |
96 | вмещается в int. |
97 | |
98 | int a = 2147483647; |
99 | cout << a + 1; |
100 | Результат будет -2147483648. |
101 | вещественные -- числа с плавающей точкой |
102 | - float - 32 bits => 3.14 (6 знаков) |
103 | - double - 64 bits => (12-13 знаков) |
104 | - long double - 128 bits => (18-19 знаков) |
105 | - unsigned float |
106 | - unsigned double |
107 | - unsigned long double |
108 | |
109 | Для вывода с определенной точностью |
110 | #include <iomanip> |
111 | |
112 | |
113 | cout << fixed << setprecision(9) << x; |
114 | double x = 5.14; |
115 | На экран выйдет: 5.140000000 |
116 | Символьные |
117 | char x; |
118 | x = 'a'; |
119 | |
120 | ASCII -> любой символ храниться как число |
121 | 'a' - 97 |
122 | 'b' - 98 |
123 | 'c' - 99 |
124 | ... |
125 | 'z' - 122 |
126 | |
127 | 'A' - 65 |
128 | 'B' - 66 |
129 | 'C' - 67 |
130 | ... |
131 | 'Z' - 90 |
132 | |
133 | '0' - 48 |
134 | '1' - 49 |
135 | '2' - 50 |
136 | ... |
137 | '9' - 57 |
138 | |
139 | Все символы при сравнении сравниваются по ASCII коду. |
140 | Например, 'A' < 'a' => true => 65 < 97 |
141 | char x = 'a'; |
142 | x++; // x = x + 1; => x = 'b' |
143 | |
144 | char x; |
145 | cin >> x; |
146 | if ('A' <= x && x <= 'Z') { |
147 | x += 32; |
148 | } else if ('a' <= x && x <= 'z') { |
149 | x -= 32; |
150 | } |
151 | cout << x; |
152 | |
153 | if ('0' <= x && x <= 9) { // 48 <= x && x <= 57 |
154 | cout << "YES"; |
155 | } else { |
156 | cout << "NO"; |
157 | } |
158 | |
159 | Как узнать ASCII код символа? |
160 | char x; |
161 | cin >> x; |
162 | cout << int(x); |
163 | |
164 | Как превратить в символ по ASCII коду? |
165 | int n; // n <= 127 |
166 | cin >> n; |
167 | cout << char(n); |
168 | Булевые |
169 | 1 bit => 0 или 1 ---> но архитектура компьютера по байтам -> |
170 | 1 bool => 1B = 8 bits |
171 | 0 == false |
172 | не ноль = 1 = true |
173 | |
174 | bool flag = false; |
175 | flag = true; |
176 | |
177 | if (flag == true) // if (flag) |
178 | if (flag == false) // if (!flag) |
179 | Составные --- структура данных |
180 | Массив |
181 | int a[30]; // одинаковый тип у всех элементов |
182 | |
183 | Пример: |
184 | int n; |
185 | cin >> n; |
186 | int a[n]; // индексы будут [0; n - 1] |
187 | for (int i = 0; i < n; ++i) { |
188 | cin >> a[i]; |
189 | } |
190 | for (int i = n - 1; i >= 0; --i) { |
191 | cout << a[i] << " "; |
192 | } |
193 | Двумерный массив - массивов массивов по другому таблица = матрица |
194 | int a[3][4]; |
195 | a[0] = {0, 0, 0, 0}; |
196 | a[1] = {0, 0, 0, 0}; |
197 | a[2] = {0, 0, 0, 0}; |
198 | |
199 | Пример: |
200 | Дана матрица размера n*n, ' |
201 | надо найти сумму элементов |
202 | в главной диагонали и вывести также все элементы. |
203 | |
204 | 0 1 2 |
205 | 0 1 2 3 |
206 | 1 4 5 6 |
207 | 2 7 8 9 |
208 | |
209 | int n; |
210 | cin >> n; |
211 | int a[n][n], sum = 0; |
212 | for (int i = 0; i < n; ++i) { |
213 | for (int j = 0; j < n; ++j) { |
214 | cin >> a[i][j]; |
215 | if (i == j) { |
216 | sum += a[i][j]; |
217 | } |
218 | } |
219 | } |
220 | |
221 | cout << sum << endl; |
222 | for (int i = 0; i < n; ++i) { |
223 | for (int j = 0; j < n; ++j) { |
224 | cout << a[i][j] << " "; |
225 | } |
226 | cout << endl; |
227 | } |
228 | |
229 | Многомерный массив - |
230 | Например: 3D -> int a[3][4][5]; -> массив таблиц |
231 | 4D -> int a[3][3][4][4] -> таблица таблиц |
232 | |
233 | Строка |
234 | Массивы |
235 | char a[10]; |
236 | |
237 | Чем отличается строка от массива символов? |
238 | - Динамичный размер - строка --- массив - статичный размер |
239 | - Готовые встроенные функция - строка --- нет готовых встроенных функции |
240 | |
241 | string s; // пустая, то есть s = ""; |
242 | cin >> s; // Hello World => слово прочитается, то есть до пробела => s = "Hello" |
243 | |
244 | getline(cin, s); // Hello World => считывает полностью линию, s = "Hello World" |
245 | |
246 | Пример: |
247 | Astana is capital of Kazakhstan. Almaty is beautiful city. |
248 | Fizmat is great school. |
249 | Apple is great company. |
250 | |
251 | string s; |
252 | int wordCnt = 0; |
253 | while (cin >> s) { // возвращает true, если смог прочитать слово |
254 | wordCnt++; |
255 | } |
256 | cout << wordCnt; |
257 | |
258 | |
259 | string s; |
260 | int lineCnt = 0; |
261 | while (getline(cin, s)) { // возвращает true, если смог прочитать слово |
262 | lineCnt++; |
263 | } |
264 | cout << lineCnt; |
265 | |
266 | |
267 | string s; |
268 | cin >> s; |
269 | cout << s; |
270 | |
271 | string s; |
272 | cin >> s; |
273 | for (int i = 0; i < s.size(); ++i) { |
274 | cout << s[i]; |
275 | } |
276 | |
277 | string s = "Hello World"; |
278 | // s.size() => размер, 11 |
279 | // s.empty() => true or false, пустой или нет |
280 | // s.substr(6, 5) -> дает подстроку длиной 5 символов начиная с индекса 6, "World" |
281 | |
282 | string s = "Hello"; |
283 | for (char x: s) { |
284 | cout << x; |
285 | } |
286 | // x = 'H' => x = 'e' => x = 'l' => x = 'l' => x = 'o' |
287 | |
288 | string s = "Hello"; |
289 | for (auto x: s) { |
290 | cout << x; |
291 | } |
292 | // x = 'H' => x = 'e' => x = 'l' => x = 'l' => x = 'o' |
293 | |
294 | Сравнение строк - лексикографически |
295 | |
296 | string a = "12", b = "2"; // "AB" "B" |
297 | if (a > b) { |
298 | cout << "YES"; |
299 | } else { |
300 | cout << "NO"; |
301 | } |
302 | |
303 | "12", "11" |
304 | |
305 | pair -- пара |
306 | pair<int, int> x; |
307 | x.first = 5; |
308 | x.second = 7; |
309 | |
310 | pair<int, int> y; |
311 | y.first = 3; |
312 | y.second = 8; |
313 | |
314 | swap(x, y); |
315 | |
316 | x = y; |
317 | |
318 | // ----------- |
319 | int a, b; |
320 | a = 5; |
321 | b = 7; |
322 | |
323 | int c, d; |
324 | c = 3; |
325 | d = 8; |
326 | |
327 | a = c; |
328 | b = d; |
329 | |
330 | swap(a, c); |
331 | swap(b, d); |
332 | |
333 | Время --- h, m, s --- (8:15:27) |
334 | pair<int, pair<int, int>> t; |
335 | t.first = 8; |
336 | t.second.first = 15; |
337 | t.second.second = 27; |
338 | |
339 | pair<int, pair<int, int>> td; |
340 | t.first = 3; |
341 | t.second.first = 55; |
342 | t.second.second = 17; |
343 | |
344 | if (t > td) { |
345 | swap(t, td); |
346 | } |
347 | |
348 | Пример кода: |
349 | |
350 | #include <bits/stdc++.h> |
351 | #define ll long long |
352 | #define h first |
353 | #define m second.first |
354 | #define s second.second |
355 | #define Time pair<int,pair<int,int>> |
356 | |
357 | using namespace std; |
358 | |
359 | int main() { |
360 | // pair<int, pair<int, int>> x; |
361 | Time ta, tb; |
362 | cin >> ta.h >> ta.m >> ta.s; |
363 | cin >> tb.h >> tb.m >> tb.s; |
364 | if (ta > tb) { |
365 | cout << "YES"; |
366 | } else { |
367 | cout << "NO"; |
368 | } |
369 | return 0; |
370 | } |
371 | |
372 | Структура данных |
373 | |
374 | struct Point { |
375 | int x, y; |
376 | }; |
377 | |
378 | struct Triangle { |
379 | Point A, B, C; |
380 | |
381 | double getArea() { |
382 | double ab = sqrt((A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y)); |
383 | double ac = sqrt((A.x - C.x) * (A.x - C.x) + (A.y - C.y) * (A.y - C.y)); |
384 | double bc = sqrt((B.x - C.x) * (B.x - C.x) + (B.y - C.y) * (B.y - C.y)); |
385 | double p = (ab + ac + bc) / 2.0; |
386 | return sqrt(p * (p - ab) * (p - bb) * (p - ac)); |
387 | } |
388 | }; |
389 | |
390 | int main() { |
391 | int n; |
392 | cin >> n; |
393 | Triangle t[n]; |
394 | int k = 0; |
395 | for (int i = 0; i < n; ++i) { |
396 | cin >> t[i].A.x >> t[i].A.y; |
397 | cin >> t[i].B.x >> t[i].B.y; |
398 | cin >> t[i].C.x >> t[i].C.y; |
399 | |
400 | if (t[k].getArea() < t[i].getArea()) { |
401 | k = i; |
402 | } |
403 | } |
404 | |
405 | cout << k; |
406 | } |
407 | |
408 | Векторы --- vector<int> a; --- структура данных похожий массив, с динамичный размером |
409 | |
410 | vector<int> a; // пустой |
411 | int n; |
412 | cin >> n; |
413 | vector<int> a(n, -1); // создали сразу с размером n, заполненный значениями -1 |
414 | |
415 | vector<int> a; |
416 | int n; |
417 | cin >> n; |
418 | for (int i = 0; i < n; ++i) { |
419 | int x; |
420 | cin >> x; |
421 | a.push_back(x); |
422 | } |
423 | a.pop_back(); // удаляет последний элемент |
424 | |
425 | a.insert(5, 6); |
426 | a.insert(3, {1, 2, 3}); |
427 | |
428 | 7. Условный оператор |
429 | if (x > 0) { |
430 | cout << "Positive"; |
431 | } else if (x < 0) { |
432 | cout << "Negative"; |
433 | } else { |
434 | cout << "Zero"; |
435 | } |
436 | |
437 | Операторы сравнения |
438 | <, >, ==, !=, <=, >= |
439 | |
440 | Логические операторы |
441 | && - and --- объединяет два условия в один, возвращает true, если оба условии true. |
442 | || - or --- объединяет два условия в один, возвращает true, если хотя бы один из условии true. |
443 | ! - перевочивает значение условии в обратное |
444 | |
445 | 8. Циклы |
446 | for, while, do-while |
447 | |
448 | int x; |
449 | cin >> x; // 123 |
450 | int digitSum = 0; |
451 | while (x > 0) { |
452 | digitSum += x % 10; // 123 % 10 = 3, sum += 3=> sum=3, sum+=12%10 => sum=5, sum+=1%10=6 |
453 | x /= 10; // x=123/10=12 => x=12/10=1, x=1/10=0 |
454 | } |
455 | cout << digitSum; |
456 | |
457 | |
458 | int n; |
459 | cin >> n; |
460 | int sum = 0; |
461 | for (int i = 0; i < n; i++) { |
462 | int x; |
463 | cin >> x; |
464 | sum += x; |
465 | } |
466 | |
467 | do { |
468 | |
469 | } while (condition); |
470 | */ |