準備
線上測評系統
Codeforces是一個提供線上評測系統的俄羅斯網站。截止2023年,該網站已經擁有超過2,000,000的註冊使用者。
AtCoder是日本最大的演算法競技網站。提供程式設計線上比賽、過往比賽提交、線上評測等服務。
準備工作
-
安裝Code::Blocks。
-
安裝Edge瀏覽器。
-
安裝瀏覽器擴充套件——篡改猴。
-
安裝指令碼Atcoder Better!。
認識程式
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll a,b;
cin >> a >> b;
cout << a+b;
return 0;
}
程式功能:輸入兩個整數,程式會輸出這兩個整數的和。
整數
輸出整數
cout << 整數;
使用整數表示式
-
加
+
-
減
-
-
乘
*
-
除(向下取整)
/
(表達向下取整含義時,除數不能是負數,被除數必須是正數)
優先順序:先乘除,後加減。括號()
可以改變運算順序。
*不等式的性質
性質1:不等式兩邊加同一個數,不等號的方向不變.
若\(a>b\),則\(a+c>b+c\)。
性質2:不等式兩邊乘同一個正數,不等號的方向不變.
若\(a>b\)且\(c>0\),則\(ac>bc\)。
性質3:不等式兩邊乘同一個負數,不等號的方向改變.
若\(a>b\)且\(c<0\),則\(ac<bc\)。
*整數除法
a除以b向下取整寫作\(\lfloor \frac{a}{b} \rfloor\),表示小於等於\(\frac{a}{b}\)的整數中最大的一個。
a除以b向上取整寫作\(\lceil \frac{a}{b} \rceil\),表示大於等於\(\frac{a}{b}\)的整數中最小的一個。
*一些結論:
-
若\(x\)為整數且\(x\le\frac{a}{b}\),則\(x\)的取值範圍為\(x\le\lfloor\frac{a}{b}\rfloor\)。
-
若\(x\)為整數且\(x\ge\frac{a}{b}\),則\(x\)的取值範圍為\(x\ge\lceil\frac{a}{b}\rceil\)。
-
若\(x\)為整數,則\(\lfloor\frac{a}{b}+x\rfloor=\lfloor\frac{a}{b}\rfloor+x\)且\(\lceil\frac{a}{b}+x\rceil=\lceil\frac{a}{b}\rceil+x\)。
-
若a為非負整數且b為正整數,則\(\lceil\frac{a}{b}\rceil=\lfloor\frac{a+b-1}{b}\rfloor\)。
整數變數
宣告一個整數變數:
long long 變數名;
如果在main()
前面加上typedef long long ll;
,可以用下面的程式碼宣告一個整數變數:
ll 變數名;
宣告多個變數:
ll 變數名1,變數名2,變數名3,...,變數名n;
變數名的規則:
- 識別符號不能是關鍵字。
- 識別符號只能由字母、數字和下劃線字元組成。
- 識別符號必須以字母或下劃線開頭。不能以數字開頭。
- 區分大小寫。
識別符號:使用者程式設計時使用的名字。
練習:判斷以下識別符號是否可以作為變數名
hello
3d
_0_0_
long
LoNg
對整數變數進行賦值:
變數名=整數;
宣告整數變數的同時可以對其進行賦值:
ll 變數名=整數;
宣告多個變數同理:
ll 變數名1=整數,變數名2=整數,變數名3=整數,...,變數名n=整數;
練習:閱讀程式,給出程式的輸出結果
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll a=1,b=2;
cout << a+b*3+4;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll a=3,b=4,c=0;
c=a;
a=b;
b=c;
cout << a*2+b;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll a=1,b=1;
ll c=a+b;
a=b+c;
b=c+a;
c=a+b;
a=b+c;
a=a+10;
cout << a;
return 0;
}
輸入整數
cin >> 整數變數;
例題:輸入兩個整數a,b,輸出它們的和。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll a,b;
cin >> a >> b;
cout << a+b;
return 0;
}
abc178a-Not
abc198a-Div
abc172a-Calc
abc302a-Attack
abc262a-World Cup
abc173a-Payment
取模
計算\(a(a\ge 0)\)除以\(b(b>0)\)的餘數:
a%b
也可以表示為\(a-\lfloor\frac{a}{b}\rfloor\cdot b\)。
a-a/b*b
abc254a-Last Two Digits
abc235a-Rotate
abc227a-Last Card
條件判斷
布林型別
布林型別的取值有兩種:
-
true
表示真,數值為1。 -
false
表示假,數值為0。
宣告一個布林變數:
bool 變數名;
給布林變數賦非零值時,會轉為true(1)。
關係運算子
==
等於
!=
不等於
>
大於
<
小於
>=
大於等於
<=
小於等於
當條件為真時,返回true(1),否則返回false(0)。
邏輯運算子
&&
且:運算元均為true時,結果為true,否則為false。
*並且:用於連線並列的形容詞等,表示同時存在。
||
或:運算元均為flase時,結果為false,否則為true。
*或者:用在敘述句裡,表示選擇關係。
!
非(只有一個運算元):運算元為true時,結果為false;運算元為false時,結果為true。
條件的表達
x大於5且x小於等於9
x>5&&x<=9
x大於等於8或x小於3
x>=8||x<3
練習:
-
x與y的和是正數且x與y的積是負數
-
x在10到20之間,或者在30到40之間
-
x和y中至少有一個3的倍數,並且x+y和x*y中至少有一個是4的倍數
-
x年是閏年
閏年:能被4整除且不能被100整除,或者能被400整除。
if語句
if(條件){
語句;
語句;
...
語句;
}else{
語句;
語句;
...
語句;
}
當條件為真(true)時,程式會執行if大括號內的語句,否則執行else大括號內的語句。
如果只有一條語句,可以簡寫為:
if(條件)語句;
else 語句;
若想在條件為假(false)時不執行語句,可以將else省略。
常用函式
得到兩個數的最大值
max(數,數)
得到多個數的最大值
max({數,數,...,數})
得到兩個數的最小值
min(數,數)
得到多個數的最小值
min({數,數,...,數})
交換兩個變數的值
swap(變數名,變數名)
求一個數的絕對值
abs(數)
實數\(x\)的絕對值,記為\(\left|x\right|\)。
\( |x|= \begin{cases} x&x>0\\ 0&x=0\\ -x&x<0\\ \end{cases} \)
輸出字串
cout << 字串;
由雙引號包裹的內容為字串,如"yes"
、"no"
。
三元運算子
條件?X:Y
如果滿足條件,表示式的值為X,否則為Y。
yes or no
例題:abc223a-Exact Price
使用if:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll x;
cin >> x;
if(x%100==0&&x>0)cout << "Yes";
else cout << "No";
return 0;
}
使用三元運算子:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll x;
cin >> x;
cout << (x%100==0&&x>0?"Yes":"No");
return 0;
}
abc253a-Median?
abc228a-On and Off
abc309a-Nine
abc240a-Edge Checker
判斷結果
abc243a-Shampoo
abc245a-Good morning
abc249a-Jogging
分類討論
abc250a-Adjacent Squares
abc214a-New Generation ABC
abc259a-Growth Record
abc331a-Tomorrow
abc355a-Who Ate the Cake?
abc305a-Water Station
abc233a-10yen Stamp
<題單1-1>
abc326a-2UP3DOW
abc352a-AtCoder Line
abc343a-Wrong Answer
abc318a-Full Moon
<題單1-2>
abc269a-Anyway Takahashi
abc334a-Christmas Present
abc212a-Alloy
abc219a-AtCoder Quiz 2
迴圈
數學知識補充:等差數列
換行
cout << endl;
也可以使用跳脫字元\n
cout << '\n';
自增和自減
將變數的值+1
變數名++
或者
++變數名
同理,將變數的值-1
變數名--
或者
--變數名
將變數的值+n
變數名+=n
同理,將變數的值-n
變數名-=n
i++和++i的區別(i--和--i同理):
i++是先賦值,然後再自增;++i是先自增,後賦值。
用程式碼表示就是:
若 a = i++; 則等價於 a=i;i=i+1;
而 a = ++i; 則等價於 i=i+1;a=i;
while迴圈
while(條件){
語句;
語句;
...
語句;
}
當條件滿足時,會反覆執行大括號內的語句。
練習(使用while迴圈):
-
無限輸出
hello
-
輸出10次
hello
-
按順序輸出1到100的所有數
-
按順序輸出100到1的所有數
-
從小到大輸出1到100的所有是7的倍數的奇數
for迴圈
for(初始化語句;條件;主體結束執行語句){
語句;
語句;
...
語句;
}
for迴圈開始前會執行初始化語句
。
在滿足條件
時,迴圈會一直執行大括號內的語句。
每執行完一次大括號內的語句時,會執行一次主體結束執行語句
。
初始化語句
、條件
、主體結束執行語句
均可以省略,省略條件
時,迴圈會一直進行下去。
練習(使用for迴圈):
-
無限輸出
hello
-
輸出10次
hello
-
按順序輸出1到100的所有數
-
按順序輸出100到1的所有數
-
從小到大輸出1到100的所有是7的倍數的奇數
迴圈控制語句
退出當前迴圈:
break;
跳過此次迴圈的剩餘部分:
continue;
變數的作用域
區域性變數:在函式或一個程式碼塊內部宣告的變數。只能被函式內部或者程式碼塊內部的語句使用。
全域性變數:在所有函式外部定義的變數。全域性變數的值在程式的整個生命週期內都是有效的。
宣告全域性變數時,變數的初始值為0。
重複
abc288a-Many A+B Problems
abc283a-Power
abc320a-Leyland Number
abc221a-Seismic magnitude scales
abc238a-Exponential or Quadratic
列舉
abc281a-Count Down
abc340a-Arithmetic Progression
陣列
陣列可以用來宣告多個相同型別的變數
宣告\(N\)個整數變數的方法:
ll 陣列名[N];
宣告\(N\)個布林變數同理:
bool 陣列名[N];
用以上方法宣告陣列後,可以使用的變數為:
陣列名[0]
、陣列名[1]
、陣列名[2]
、...、陣列名[N-2]
、陣列名[N-1]
,共\(N\)個變數。
注意:這裡的\(N\)是常量,不能是變數。
常量:在程式執行期間不會改變的固定值。
整數常量的宣告:
const ll 常量名=整數;
案例:輸入正整數\(n\),以及\(n\)個整數:\(a_1,a_2,a_3,...,a_n\)。將它們倒序輸出(兩個數之間用空格隔開)。
ll n,a[N];
cin >> n;
for(ll i=1;i<=n;i++)cin >> a[i];
for(ll i=n;i>=1;i--)cout << a[i] << " ";
陣列和
abc272a-Integer Sum
abc351a-The bottom of the ninth
abc349a-Zero Sum Game
abc337a-Scoreboard
abc332a-Online Shopping
存在尋找
abc353a-Buildings
abc317a-Potions
abc300a-N-choice question
abc277a-^{-1}
abc313a-To Be Saikyo
資料過濾
abc347a-Divisible
abc294a-Filter
加工計算
abc346a-Adjacent Product
abc290a-Contest Result
abc307a-Weekly Records
abc330a-Counting Passes
陣列操作
abc278a-Shift
abc247a-Move Right
桶
abc248a-Lacked Number
abc268a-Five Integers
abc263a-Full House
<題單1-3>
abc328a-Not Too Hard
abc297a-Double Click
abc275a-Find Takahashi
abc241a-Digit Machine