|  | {noformat} \- 1. Маленькие хитрости |
| | \- 1. Маленькие хитрости |
| \- контроль корректности при исполнении программы assert(z\[i\] \!= LLONG_MAX); \- измерение времени выполнения и производительности процесора cerr << fixed << setprecision(0) << "TIME = " << clock() / (ld)CLOCKS_PER_SEC * 1000 << "\n"; \- для выхода из множества циклов внутри процедуры return 0 |
| \- 1LL - константа 1 типа long long ans+=1LL*(выражение типа int), когда сумма превысит int |
| \- да и нет по русски #include <bits/stdc++.h> using namespace std; int main() { int n,m,a\[50\],i; char d,dd,u,uu,uuu; d=164; dd=160; u=173; uu=165; uuu=226; cin >> m >> n; for(i=0;i<n;i++) cin >> a\[i\]; i=0; while(i<n && a\[i\]\!=m) i++; if(i==n) cout << u << uu << uuu; else cout << d << dd; } |
| |
 |  | \- контроль корректности при исполнении программы |
| |
| assert(z\[i\] \!= LLONG_MAX); |
| |
| |
| |
| \- измерение времени выполнения и производительности процесора |
| |
| cerr << fixed << setprecision(0) |
| |
| << "TIME = " << clock() / (ld)CLOCKS_PER_SEC * 1000 << "\n"; |
| |
| |
| |
| \- для выхода из множества циклов внутри процедуры |
| |
| return 0 |
| |
| \- 1LL - константа 1 типа long long |
| |
| ans+=1LL*(выражение типа int), когда сумма превысит int |
| |
| \- да и нет по русски |
| |
| #include <bits/stdc++.h> |
| |
| using namespace std; |
| |
| |
| |
| int main() |
| |
| { |
| |
| int n,m,a\[50\],i; |
| |
| char d,dd,u,uu,uuu; |
| |
| d=164; dd=160; u=173; uu=165; uuu=226; |
| |
| cin >> m >> n; |
| |
| for(i=0;i<n;i++) cin >> a\[i\]; i=0; |
| |
| while(i<n && a\[i\]\!=m) i++; |
| |
| if(i==n) cout << u << uu << uuu; |
| |
| else cout << d << dd; |
| |
| } |
| |
| |
| |
| 0. Для передачи значения обратно из функции в вызывающую программу |
| |
| пишем знак & (передать адрес), например |
| |
| bool Good(int &x) {...} |
| |
| Пример |
| |
| #include <bits/stdc++.h> |
| |
| using namespace std; |
| |
| |
| |
| void Split(int x, int &x1, int &x2, int &x3) |
| |
| { |
| |
| x1=x%10; |
| |
| x3=x/100; |
| |
| x2=(x/10) % 10; |
| |
| } |
| |
| |
| |
| int main() |
| |
| { |
| |
| int i,i1,i2,i3, |
| |
| j,j1,j2,j3, |
| |
| n,a2,a3; |
| |
| cin >> n; |
| |
| ... |
| |
| Split(i,i1,i2,i3); |
| |
| Split(j,j1,j2,j3); |
| |
| if (((i1+i2+i3)==(j1+j2+j3)) && (abs(i-j)>a3)) |
| |
| a3=abs(i-j); |
| |
| |
| |
| } |
| |
| 1. Порядок вычисления логических выражений |
| |
| Для && слева направо |
| |
| && гарантирует что второй операнд не вычисляется, если первый - ложь. |
| |
| | 0. Для передачи значения обратно из функции в вызывающую программу пишем знак & (передать адрес), например bool Good(int &x) {...} |
| Пример #include <bits/stdc++.h> using namespace std; void Split(int x, int &x1, int &x2, int &x3) { x1=x%10; x3=x/100; x2=(x/10) % 10; } int main() { int i,i1,i2,i3, j,j1,j2,j3, n,a2,a3; cin >> n; ... Split(i,i1,i2,i3); Split(j,j1,j2,j3); if (((i1+i2+i3)==(j1+j2+j3)) && (abs(i-j)>a3)) a3=abs(i-j); } |
| 1. Порядок вычисления логических выражений Для && слева направо && гарантирует что второй операнд не вычисляется, если первый - ложь. |
| while ( (k<=es) && (s\[k\]\!=t) ) k++; |
 |  | |
| к s\[k\] не происходит обращения, если k>es |
 |  | 2. iostream::sync_with_stdio(false); cin.tie(NULL); \- для ускорения потокового ввода |
| |
 |  | 2. iostream::sync_with_stdio(false); |
| |
| cin.tie(NULL); |
| |
| \- для ускорения потокового ввода |
| |
| 3. Объявление файлов |
 |  | |
| (стандартный потоковый ввод-вывод) |
 |  | ifstream cin("round.in"); ofstream cout("round.out"); или так |
| freopen("auto.in", "r", stdin); freopen("auto.out", "w", stdout); |
| или так - потоковый ввод-вывод с файловыми переменными fin fout |
| ifstream fin("perimeter.in"); ofstream fout("perimeter.out"); fin >> n; fout << n; |
| Работа с файлом, если он есть и с клавиатурой в противном случае |
| if (fopen("boarding.in", "r")) { freopen("boarding.in", "r", stdin); freopen("boarding.out", "w", stdout); } |
| |
 |  | ifstream cin("round.in"); |
| |
| ofstream cout("round.out");\\ |
| |
| или так |
| |
| freopen("auto.in", "r", stdin); |
| |
| freopen("auto.out", "w", stdout); |
| |
| или так - потоковый ввод-вывод |
| |
| с файловыми переменными fin fout |
| |
| ifstream fin("perimeter.in"); |
| |
| ofstream fout("perimeter.out"); |
| |
| fin >> n; |
| |
| fout << n; |
| |
| Работа с файлом, если он есть |
| |
| и с клавиатурой в противном случае |
| |
| if (fopen("boarding.in", "r")) |
| |
| { |
| |
| freopen("boarding.in", "r", stdin); |
| |
| freopen("boarding.out", "w", stdout); |
| |
| } |
| |
| Работа с файлом, на своей машине |
| |
| и с клавиатурой/экраном на DL |
| |
| #ifndef CONTEST |
| |
| ifstream cin("input.txt"); |
| |
| ofstream cout("output.txt"); |
| |
| #endif |
| |
| | Работа с файлом, на своей машине и с клавиатурой/экраном на DL |
| #ifndef CONTEST ifstream cin("input.txt"); ofstream cout("output.txt"); #endif |
| Работа до конца входного файла |
 |  | |
| ifstream cin("input.txt"); |
| |
| ofstream cout("output.txt"); |
| |
| cin >> a; |
| |
| while (not cin.eof()) |
| |
| { |
| |
| ... |
| |
| cin >> a; |
| |
| } |
| |
| 4. Знаковые |
| |
| 2 байта - int |
| |
| 4 байта - long int |
| |
| 8 байт \- long long |
| |
| | ifstream cin("input.txt"); ofstream cout("output.txt"); |
| cin >> a; while (not cin.eof()) { ... cin >> a; } |
| 4. Знаковые 2 байта - int 4 байта - long int 8 байт \- long long |
| беззнаковые \- unsigned (int, long int, long long) |
| |
 |  | 5. Константы |
| | 5. Константы #define MaxN 1e5; const int MaN = 1e5; |
| 6. ans = (ans==INF) ? \-1 : ans; // если ans=INF занесnи туда \-1 условие true false |
| |
 |  | #define MaxN 1e5; |
| | 7. Как вернуть значение в вызывающую программу ? \- написать & перед именем переменной то есть в подпрограмму передаётся не значение, а адрес и потому в подпрограмме модифицируется сама переменная из вызывающей программы |
| |
 |  | const int MaN = 1e5; |
| | bool Found(int &x, int &y) { for (int i=0; i<8; i++) for (int j=0; j<8; j++) if (not Marked\[i\]\[j\]) { x=i; y=j; return true;}; return false; } |
| |
 |  | 6. ans = (ans==INF) ? \-1 : ans; // если ans=INF занесnи туда \-1 |
| |
| условие true false |
| |
| 7. Как вернуть значение в вызывающую программу ? |
| |
| \- написать & перед именем переменной |
| |
| то есть в подпрограмму передаётся не значение, а адрес |
| |
| и потому в подпрограмме модифицируется сама переменная |
| |
| из вызывающей программы |
| |
| bool Found(int &x, int &y) |
| |
| { |
| |
| for (int i=0; i<8; i++) |
| |
| for (int j=0; j<8; j++) |
| |
| if (not Marked\[i\]\[j\]) |
| |
| { x=i; y=j; return true;}; |
| |
| return false; |
| |
| } |
| |
| 8. Работа в Codeblocks |
 |  | |
| \- ДУБЛИРОВАНИЕ СТРОКИ |
| |
| ctrl+D |
| |
| \- СДВИГ ТЕКСТА ВПРАВО/ВЛЕВО |
| |
| отмечаем несколько строк и можно сдвигать их |
| |
| вправо - клавишей TAB |
| |
| влево \- клавишами Shift + TAB |
| |
| | \- ДУБЛИРОВАНИЕ СТРОКИ ctrl+D \- СДВИГ ТЕКСТА ВПРАВО/ВЛЕВО отмечаем несколько строк и можно сдвигать их вправо - клавишей TAB влево \- клавишами Shift + TAB |
| 9. Массив инициализируется нулями при объявлении? |
 |  | |
| Массивы в C+\+ по стандарту по умолчанию не обнуляются. |
| |
| Но для обнуления есть отдельный краткий синтаксис: |
| |
| http://stackoverflow.com/questions/1920430/c-array-initialization |
| |
| Поэтому можно писать по вкусу: |
| |
| int a\[10\] = {0}; |
| |
| int a\[10\] = {}; |
| |
| int a\[10\] {0}; |
| |
| int a\[10\] {}; |
| |
| Тогда отдельный обнуляющий цикл не понадобится.\\ |
| |
| Некоторые компиляторы, такие как GCC, заполняют все элементы массива нулями при его создании. |
| |
| https://code-live.ru/post/cpp-arrays/ |
| |
| | Массивы в C+\+ по стандарту по умолчанию не обнуляются.Но для обнуления есть отдельный краткий синтаксис:http://stackoverflow.com/questions/1920430/c-array-initialization |
| Поэтому можно писать по вкусу:int a\[10\] = {0};int a\[10\] = {};int a\[10\] {0};int a\[10\] {}; |
| Тогда отдельный обнуляющий цикл не понадобится. |
| Некоторые компиляторы, такие как GCC, заполняют все элементы массива нулями при его создании. https://code-live.ru/post/cpp-arrays/ |
| А вот эта программа без ручного обнуления не проходит: |
 |  | |
| \#include <bits/stdc++.h> |
| |
| using namespace std; |
| |
| int main() |
| |
| { |
| |
| freopen("input.txt", "r", stdin); |
| |
| freopen("output.txt", "w", stdout); |
| |
| | {code:title=p3.cpp\|borderStyle=solid}\#include <bits/stdc++.h>using namespace std; |
| int main() { freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); |
| int g\[15\],n,m,k,i,x,y,ans; |
 |  | |
| cin>> n >> m >> k; |
 |  | |
| for (i=0; i<n; i++) g\[i\]=0; // без этого оператора не сдаётся |
 | | |
| for (i=0; i<n; i++) |
| |
| { |
| |
| cin >> x >> y; |
| |
| g\[--x\]=1; g\[--y\]=1; |
| |
| } |
| |
| ans=0; |
| |
| for (i=0; i<n; i++) |
| |
| if (g\[i\]==0) ans++; |
| |
| cout << ans; |
| |
| }{noformat} \\ |
| | for (i=0; i<n; i++) { cin >> x >> y; g\[--x\]=1; g\[--y\]=1; } ans=0; for (i=0; i<n; i++) if (g\[i\]==0) ans++; cout << ans;}{code} |