|  | \- 1. Маленькие хитрости |
| | {noformat} \- 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 |
| |
| \- да и нет по русски |
 |  | {code:title=p1.cpp\|borderStyle=solid} #include <bits/stdc++.h> |
| | |
| #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; |
 |  | }{code} |
| |
| |
 |  | } |
| |
 |  | |
| |
| 0. Для передачи значения обратно из функции в вызывающую программу |
 |  | |
| пишем знак & (передать адрес), например |
 |  | |
| bool Good(int &x) {...} |
| |
| Пример |
 |  | {code:title=p2.cpp\|borderStyle=solid} #include <bits/stdc++.h> |
| | |
| #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); |
 |  | |
| |
 |  | }{code} |
| |
 |  | } |
| |
| 1. Порядок вычисления логических выражений |
 |  | |
| Для && слева направо |
 |  | |
| && гарантирует что второй операнд не вычисляется, если первый - ложь. |
| |
 |  | {quote} while ( (k<=es) && (s\[k\]\!=t) ) k++;{quote} |
| | while ( (k<=es) && (s\[k\]\!=t) ) k++; |
| |
| к s\[k\] не происходит обращения, если k>es |
| |
 |  | 2. {quote}iostream::sync_with_stdio(false); |
| cin.tie(NULL);{quote} |
| \- для ускорения потокового ввода |
| | 2. iostream::sync_with_stdio(false); |
| |
 |  | cin.tie(NULL); |
| |
 |  | \- для ускорения потокового ввода |
| |
| 3. Объявление файлов |
| |
| (стандартный потоковый ввод-вывод) |
| |
 |  | {quote} ifstream cin("round.in"); |
| ofstream cout("round.out");{quote} |
| |
| | ifstream cin("round.in"); |
| |
| ofstream cout("round.out");\\ |
| |
| или так |
| |
 |  | {quote} freopen("auto.in", "r", stdin); |
| freopen("auto.out", "w", stdout);{quote} |
| | freopen("auto.in", "r", stdin); |
| |
 |  | freopen("auto.out", "w", stdout); |
| |
| или так - потоковый ввод-вывод |
 |  | |
| с файловыми переменными fin fout |
| |
 |  | {quote} ifstream fin("perimeter.in"); |
| | ifstream fin("perimeter.in"); |
| |
| ofstream fout("perimeter.out"); |
 |  | |
| fin >> n; |
 |  | fout << n;{quote} |
| |
 |  | fout << n; |
| |
| Работа с файлом, если он есть |
 |  | |
| и с клавиатурой в противном случае |
| |
 |  | {quote} if (fopen("boarding.in", "r")) |
| | if (fopen("boarding.in", "r")) |
| |
| { |
 |  | |
| freopen("boarding.in", "r", stdin); |
 |  | |
| freopen("boarding.out", "w", stdout); |
 |  | }{quote} |
| |
 |  | } |
| |
| Работа с файлом, на своей машине |
 |  | |
| и с клавиатурой/экраном на DL |
 |  | {quote} |
| | |
| #ifndef CONTEST |
 |  | |
| ifstream cin("input.txt"); |
 |  | |
| ofstream cout("output.txt"); |
 |  | #endif{quote} |
| |
 |  | #endif |
| |
| Работа до конца входного файла |
| |
 |  | {quote} ifstream cin("input.txt"); |
| | ifstream cin("input.txt"); |
| |
| ofstream cout("output.txt"); |
| |
| cin >> a; |
 |  | |
| while (not cin.eof()) |
 |  | |
| { |
 |  | |
| ... |
 |  | |
| cin >> a; |
 |  | }{quote} |
| |
 |  | } |
| |
| 4. Знаковые |
 |  | |
| 2 байта - int |
 |  | |
| 4 байта - long int |
 |  | |
| 8 байт \- long long |
| |
| беззнаковые \- unsigned (int, long int, long long) |
| |
 |  | |
| 5. Константы |
 |  | {quote} #define MaxN 1e5; |
| const int MaN = 1e5;{quote} |
| |
 |  | 6. {quote}ans = (ans==INF) ? \-1 : ans; // если ans=INF занесnи туда \-1{quote} |
| условие true false |
| | #define MaxN 1e5; |
| |
 |  | const int MaN = 1e5; |
| |
 |  | 6. ans = (ans==INF) ? \-1 : ans; // если ans=INF занесnи туда \-1 |
| |
| условие true false |
| |
| 7. Как вернуть значение в вызывающую программу ? |
 |  | |
| \- написать & перед именем переменной |
 |  | |
| то есть в подпрограмму передаётся не значение, а адрес |
 |  | |
| и потому в подпрограмме модифицируется сама переменная |
 |  | |
| из вызывающей программы |
| |
 |  | {code:title=part.cpp\|borderStyle=solid} |
| 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; |
 |  | }{code} |
| |
 |  | } |
| |
| 8. Работа в Codeblocks |
| |
| \- ДУБЛИРОВАНИЕ СТРОКИ |
 |  | |
| ctrl+D |
 |  | |
| \- СДВИГ ТЕКСТА ВПРАВО/ВЛЕВО |
 |  | |
| отмечаем несколько строк и можно сдвигать их |
 |  | |
| вправо - клавишей TAB |
 |  | |
| влево \- клавишами Shift + TAB |
| |
| 9. Массив инициализируется нулями при объявлении? |
| |
| Массивы в C+\+ по стандарту по умолчанию не обнуляются. |
 |  | |
| Но для обнуления есть отдельный краткий синтаксис: |
 |  | |
| http://stackoverflow.com/questions/1920430/c-array-initialization |
| |
| Поэтому можно писать по вкусу: |
 |  | {quote}int a\[10\] = {0}; |
| | |
| int a\[10\] = {0}; |
| |
| int a\[10\] = {}; |
 |  | |
| int a\[10\] {0}; |
 |  | int a\[10\] {};{quote} |
| |
 |  | Тогда отдельный обнуляющий цикл не понадобится. |
| | int a\[10\] {}; |
| |
 |  | |
| | Тогда отдельный обнуляющий цикл не понадобится.\\ |
| |
| Некоторые компиляторы, такие как GCC, заполняют все элементы массива нулями при его создании. |
 |  | |
| https://code-live.ru/post/cpp-arrays/ |
| |
| А вот эта программа без ручного обнуления не проходит: |
 |  | {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; |
 | | }{code} |
| |
| | |
| }{noformat} \\ |