De ce contează?
Orice program face trei lucruri, în ordine: primește date, le prelucrează, afișează rezultatul. Sari primul pas și programul nu știe cu ce să lucreze. Sari ultimul și rezultatul dispare în neant. cin și cout sunt cele două capete ale acestui lanț — fără ele, programul există doar pentru el însuși.
Citire de la tastatură cu cin
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n; // citeste un intreg
int a, b;
cin >> a >> b; // citeste doua intregi, separate prin spatiu sau enter
double x;
cin >> x; // citeste un numar real
char c;
cin >> c; // citeste un caracter (sare spatiile albe)
return 0;
}cin >> sare automat spațiile albe (spații, tab-uri, newline-uri) înainte de fiecare valoare. Poți scrie cin >> a >> b >> c; pe o singură linie sau cin >> a; pe linii separate — rezultatul e identic.
Afișare cu cout
#include <iostream>
using namespace std;
int main() {
int a = 5, b = 3;
cout << a + b << endl; // afiseaza 8 si trece la linie noua
cout << a << " " << b << "\n"; // afiseaza 5 3 si trece la linie noua (mai rapid)
cout << "Suma: " << a + b; // afiseaza text + valoare
return 0;
}Citire și scriere din fișiere (standard OJI/ONI)
La concursuri, datele vin dintr-un fișier .in și rezultatul se scrie într-un fișier .out. Logica programului nu se schimbă cu nimic — înlocuiești doar cin/cout cu fin/fout:
#include <fstream>
using namespace std;
int main() {
ifstream fin("date.in"); // deschide fisierul de intrare
ofstream fout("date.out"); // deschide fisierul de iesire
int n;
fin >> n; // citeste din fisier, exact ca cin
int suma = 0;
for (int i = 0; i < n; i++) {
int x;
fin >> x;
suma += x;
}
fout << suma << "\n"; // scrie in fisier, exact ca cout
fin.close();
fout.close();
return 0;
}Numele fișierelor (suma.in, suma.out) sunt specificate în enunț — citește-l cu atenție. Dacă greșești numele, programul nu citește nimic și obții scor 0, chiar dacă logica e perfectă.
Citire rapidă (când n > 100.000)
ios_base::sync_with_stdio(false);
cin.tie(NULL);Adaugă aceste două linii imediat după { din main(), înainte de orice cin. Dezactivează sincronizarea cu stdio — programul devine de 5–10× mai rapid la citire/afișare.
Complexitate
Citirea sau afișarea unui număr costă O(1). Citirea unui șir de n numere costă O(n).
Greșeala 1: Uiți să înlocuiești cin/cout cu fin/fout la concurs. Programul compilează și rulează, dar nu citește nimic din fișier — scor 0 garantat.
Greșeala 2: Folosești endl într-o buclă cu sute de mii de iterații. endl face flush la fiecare apel — e de 10–100× mai lent decât "\n". Rezervă endl pentru afișări punctuale.
Greșeala 3: Vrei să citești un caracter care poate fi spațiu și folosești cin >> c. cin >> sare spațiile — nu îl vei prinde niciodată. Folosește cin.get(c) când contează și spațiile.