C++ ga bir qarash
4-darajaPlatina — dinamik programmalash25–32 darslar
Bu darsdan keyin siz
- Python qayerda yetarli, qayerda yetmasligini raqam bilan bilasiz
- C++ ning uchta asosiy farqini taniysiz
- qachon tilni almashtirish kerakligi haqida ongli qaror qabul qilasiz
Avval rost gap
“Avval rost gap” bo'limiga havolaBu modul Python’da yozilgan va shunday qoladi. Python’da algoritmni o’rganish osonroq: kod qisqa, sintaksis xalaqit bermaydi va fikr ko’rinib turadi.
Lekin xalqaro olimpiadada (IOI va unga olib boradigan bosqichlarda) qatnashchilarning katta qismi C++ yozadi. Sabab bitta va u oddiy: tezlik.
Sig‘adimi?
Bir soniyada taxminan 10⁸ oddiy amal bajariladi.
| Yechim | n = 10⁶ | n = 10⁷ | n = 10⁸ |
|---|---|---|---|
C++ (taxminan)n | 10⁶sig‘adi | 10⁷sig‘adi | 10⁸sig‘adi |
Python (taxminan 10 barobar sekin)n log n | 10⁷sig‘adi | 10⁸chegarada | 10⁹sig‘maydi |
Yashil — yechim o‘tadi. Sariq — chegarada, konstanta va til muhim bo‘lib qoladi. Qizil — bu yechim bilan bormaydi, boshqasini qidiring.
Jadval qo’pol, lekin nisbat to’g’ri: bir xil algoritm Python’da odatda
10 dan 50 barobargacha sekin ishlaydi. 10⁸ amal C++ da bir soniya,
Python’da esa bir necha daqiqa bo’lishi mumkin.
Uchta asosiy farq
“Uchta asosiy farq” bo'limiga havola1. Turlar oldindan e’lon qilinadi
“1. Turlar oldindan e’lon qilinadi” bo'limiga havolaPython o’zgaruvchining turini o’zi aniqlaydi va u ishlash paytida o’zgarishi mumkin. C++ da tur oldindan yoziladi va o’zgarmaydi — shuning uchun kompilyator kodni mashina buyruqlariga to’g’ridan-to’g’ri o’giradi.
int n = 5;long long katta = 1000000000000;double kasr = 2.5;string ism = "Aziza";vector<int> sonlar = {4, 2, 7};2. Kod avval kompilyatsiya qilinadi
“2. Kod avval kompilyatsiya qilinadi” bo'limiga havolaPython kodni qatorma-qator o’qib bajaradi. C++ da esa kod avval butunlay mashina tiliga o’giriladi, keyin ishga tushadi. Shuning uchun xato turlari ham boshqacha: ko’p xato kompilyatsiya paytida chiqadi, ya’ni programma ishga tushishidan oldin.
3. Kutubxona boshqacha nomlanadi
“3. Kutubxona boshqacha nomlanadi” bo'limiga havolaMa’nosi bir xil, nomi boshqa. Bu jadval yod olish uchun emas — kerak bo’lganda ochib qarash uchun.
| Python | C++ | Nima |
|---|---|---|
list |
vector |
o’zgaruvchan uzunlikdagi ro’yxat |
dict |
map yoki unordered_map |
kalit — qiymat |
set |
set yoki unordered_set |
to’plam |
deque |
deque |
ikki tomonlama navbat |
heapq |
priority_queue |
uyum |
bisect_left |
lower_bound |
ikkilik qidiruv |
sorted() |
sort() |
saralash |
Bir masala, ikki tilda
“Bir masala, ikki tilda” bo'limiga havolaDarsdagi eng oddiy masala — ro’yxatdagi eng katta son. Ikki yechim yonma-yon.
import sysmalumot = sys.stdin.buffer.read().split()n = int(malumot[0])a = [int(x) for x in malumot[1 : 1 + n]]print(max(a))#include <bits/stdc++.h>using namespace std;int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) cin >> a[i]; cout << *max_element(a.begin(), a.end()) << endl;}To’rtinchi va beshinchi qatorlar — olimpiadada deyarli har faylning boshida turadigan ikki sehrli qator. Ular kirish-chiqishni tezlashtiradi va ularsiz C++ ning o’zi ham sekin bo’lib qoladi.
kompilyatorcompiler
Manba kodni mashina buyruqlariga o’giruvchi programma. C++ kodi ishga tushishidan oldin albatta kompilyatsiya qilinadi.
Qachon almashtirish kerak
“Qachon almashtirish kerak” bo'limiga havolaQoida sodda. Yechimingiz to’g’ri, algoritmi ham to’g’ri, lekin vaqt chegarasidan o’tmayapti — va uni tezlashtirishning boshqa yo’li qolmagan. Faqat shundagina til almashtiriladi.
Amalda bu shuni bildiradi: 1–3-darajadagi masalalarning deyarli hammasi Python’da o’tadi. 4-darajadan boshlab ba’zi masalalarda chegaralar Python’ni siqib qo’yadi, 5-darajada esa bu odatiy holga aylanadi.
O’zingizni sinang
“O’zingizni sinang” bo'limiga havola1Nega olimpiadada C++ ko'p ishlatiladi?
Javobni ko'rish
Tezlik. Bir xil algoritm Python’da odatda 10–50 barobar sekin ishlaydi, eng yuqori bosqichlarda esa chegaralar aynan shu farqni hisobga olib qo’yiladi.
2C++ da int va long long farqi nima?
Javobni ko'rish
int taxminan 2·10⁹ gacha son saqlaydi, long long esa 9·10¹⁸
gacha. Chegaradan oshsa int xato bermaydi — jimgina noto’g’ri son
beradi.
3Python'ning bisect_left funksiyasi C++ da nima deb ataladi?
Javobni ko'rish
lower_bound. Ma’nosi bir xil: saralangan ketma-ketlikda berilgan
qiymatdan kichik bo’lmagan birinchi element.
4Qachon Python'dan C++ ga o'tish kerak?
Javobni ko'rish
Algoritm to’g’ri, uni tezlashtirishning boshqa yo’li qolmagan va yechim baribir vaqt chegarasidan o’tmayotgan bo’lsa. Bundan oldin emas.
5ios::sync_with_stdio(false) nima qiladi?
Javobni ko'rish
C++ ning kirish-chiqishini C tilinikidan ajratadi va shu bilan uni sezilarli tezlashtiradi. Katta kirishli masalalarda bu qator ballga ta’sir qiladi.
Topshiriq
“Topshiriq” bo'limiga havolaTopshiriq — darajangizni tanlang
Asos · 5–7-sinf — Vizual va aniq ko'rsatmali
Yuqoridagi jadvalni daftaringizga ko’chiring. Keyin oldingi darslarda yozgan uchta yechimingizni oling va har birida qaysi Python vositalari ishlatilganini, ularning C++ dagi nomini yozib chiqing.
Mustahkam · 8–9-sinf — Matnli masala, o'zingiz tuzasiz
Bitta oddiy masalani (masalan 01-eng-katta) C++ da yozib ko’ring
va uni onlayn kompilyatorda ishga tushiring. Birinchi urinishda
qanday xatolar chiqdi?
Chuqur · 10–11-sinf — Algoritmik, chegara holatlari bilan
Bir xil algoritmni ikki tilda yozing va n = 10⁷ da vaqtini
o’lchang. Nisbat qancha chiqdi? Keyin Python yechimini
tezlashtirishga urinib ko’ring (sys.stdin.buffer, ro’yxat
tushunchalari) — nisbat qanchaga o’zgardi?