---
tags: 2021CRC
title: 期中社內賽題目
---
<h2 style="text-align:center">注意事項</h2>
本次比賽由於輸入/輸出資料較多,請使用[`scanf`](`scanf`)/[`printf`](https://www.cplusplus.com/reference/cstdio/printf/)或 IO優化(`cin`/`cout`) 來做資料讀取的動作。
請注意不要將`scanf`/`printf`和`std::cin`/`std::cout`混用,並且在使用`std::cin`/`std::cout`時不要使用`std::endl`。
`scanf`/`printf`的範例程式碼:
```cpp=1
#include <cstdio>
int main(void) {
int a, b, c;
scanf("%d%d", &a, &b);
c = a+b;
printf("%d\n", c);
return 0;
}
```
IO優化的範例程式碼:
```cpp=1
#include <iostream>
int main(void) {
// IO優化
std::ios_base::sync_with_stdio(0); std::cin.tie(0); std::cout.tie(0);
int a, b, c;
std::cin >> a >> b;
c = a+b;
std::cout << c << '\n';
}
```
---
<h2 style="text-align:center"> A. 打招呼 </h2>
<p style="text-align:center"><font size=3>Time limit: 1s, Memory limit: 256Mb</font></p>
歡迎加入附中電算大家庭,剛加入社團的第一件事就是要和大家打招呼阿:D,不用擔心,學長姐們都會很「熱情」的(應該吧),試著輸入一個名字然後跟他說Hello吧
### 格式
**輸入說明:** 輸入一個字串$s \left (|s| \leq 10^6 \right )$,代表你要打招呼的對象
**輸出說明:** 輸出`Hello, s!`
**範例輸入:**
```
Foxyy
```
**範例輸出:**
```
Hello, Foxyy!
```
---
<h2 style="text-align:center"> B. 瀕臨絕種的猴子社長 </h2>
<p style="text-align:center"><font size=3>Time limit: 1s, Memory limit: 256Mb</font></p>
猴子社長是個即將瀕臨絕種的生物,他非常關心他在其他國家夥伴剩下的數量,畢竟這個稀有種是個非常聽人話而且還會扮女裝取悅大家的生物(誤),你可以幫幫他算算世界中還有幾隻猴子社長嗎?
### 格式
**輸入說明:** 輸入一個整數$n \left ( 1 \leq n \leq 10^6 \right )$,代表有幾個國家,接著輸入$n$個數字$a_i \left (1 \leq i \leq n \right )$,代表第$i$個國家中有$a_i$隻猴子社長 $0 \leq a_i \leq 10^9$
**輸出說明:** 輸出總共有幾隻猴子社長
**範例輸入:**
```
5
1 2 3 4 5
```
**範例輸出:**
```
15
```
### 子題
- 子題1 (30%)
$\sum_{i=1}^{n}a_i \leq 2^{31}-1$
- 子題2 (70%)
無特別限制
---
<h2 style="text-align:center"> C. 質數判斷 </h2>
<p style="text-align:center"><font size=3>Time limit: 1s, Memory limit: 256Mb</font></p>
承恩活動長是數資班電神,數學好的他常常仗著自己爆開的能力去欺負別人,但由於只有爆開強,每次遇到要判斷質數的方面總是會難倒他,搞得承恩活動長都很崩潰,你可以幫幫他嗎
### 格式
**輸入說明:** 輸入一個整數$n$
**輸出說明:** 若$n$是質數,輸出`yes`,否則輸出`no`
($2 \leq n \leq 10^{14}$)
**範例輸入1:**
```
5
```
**範例輸出1:**
```
yes
```
**範例輸入2:**
```
16
```
**範例輸出2:**
```
no
```
**範例輸入3:**
```
48763
```
**範例輸出3:**
```
no
```
### 子題
- 子題1 (30%)
$n \leq 10^8$
- 子題2 (70%)
無特別限制
### 註記
`yes`與`no`的大小寫不影響答案的正確性
---
<h2 style="text-align:center"> D. 宵夜時間 </h2>
<p style="text-align:center"><font size=3>Time limit: 2.5s, Memory limit: 256Mb</font></p>
彥彥小公主副社長喜歡吃東西,尤其是宵夜,導致他的體重一直掉不下來。現在又到了宵夜時間,彥彥又要來吃他最喜歡的宵夜了!
已知桌上有$n$個食物排成一列,從左到右的卡路里含量分別是$a_1, a_2, ..., a_n$,但他吃東西有個怪癖,就是他只喜歡吃**連續**排在一起的食物。為了避免彥彥小公主過胖,你想要詢問$q$次、如果彥彥小公主吃掉位在區間$[l_i, r_i]\left(1 \leq i \leq q\right)$的食物的話,攝取的卡路里會是多少。
### 格式
**輸入說明:**
第一行輸入二個整數$n$和$q$
第二行輸入$n$個數字$a_1, a_2, ..., a_n$
接下來有$q$行,每一行會輸入兩個數字$l_i$以及$r_i$
**輸出說明:**
請對每次詢問輸出彥彥小公主所攝取的的卡路里含量
($1 \leq n \leq 10^6$,$1 \leq q \leq 10^6$,$1 \leq a_i \leq 10^3$,$1 \leq l_i \leq r_i \leq n, \forall i \in [1,n]$)
**範例輸入:**
```
5 3
4 8 7 6 3
2 5
1 4
2 2
```
**範例輸出:**
```
24
25
8
```
### 子題
- 子題1 (5%)
$q=1$
- 子題2 (30%)
$q \leq 10^3$
- 子題3 (65%)
無特別限制
---
<h2 style="text-align:center"> E. 保險箱 </h2>
<p style="text-align:center"><font size=3>Time limit: 1s, Memory limit: 256Mb</font></p>
火龍果視錢如命,他把他所有的錢都放在一個保險箱裡面,這個保險箱有一個五位數的密碼,而解開這個鎖有步驟可循
您擁有由 5 位十進制數字組成的保險箱鎖。如果你旋轉某個數字,它會增加一,除了 9 變成 0。
最初,鎖包含數字$X$. 要解鎖保險箱,您必須按順序執行以下操作。
如果位置 1 和 4 上的數字總和大於 10,則將位置 1 上的數字旋轉 3 次,否則將位置 4 上的數字旋轉 8 次。
如果位置 3 和 2 上的數字總和大於 8,則將位置 4 上的數字旋轉 9 次,否則將位置 5 上的數字旋轉 8 次。
如果位置 3 上的數字是奇數,則將位置 3 上的數字旋轉 3 次,否則將位置 3 上的數字旋轉 4 次。
如果位置 5 上的數字大於位置 2 上的數字,則將位置 4 上的數字旋轉 1 次,否則將位置 2 上的數字旋轉 7 次。
如果位置 1 上的數字是奇數,則將位置 1 上的數字旋轉 3 次,否則將位置 3 上的數字旋轉 5 次。
如果位置 4 上的數字是奇數,則將位置 4 上的數字旋轉 7 次,否則將位置 1 上的數字旋轉 9 次。
如果位置 4 上的數字大於位置 1 上的數字,則將位置 4 上的數字旋轉 9 次,否則將位置 4 上的數字旋轉 2 次。
如果位置 1 上的數字大於位置 3 上的數字,則將位置 2 上的數字旋轉 1 次,否則將位置 3 上的數字旋轉 1 次。
如果位置 5 上的數字大於位置 3 上的數字,則將位置 4 上的數字旋轉 5 次,否則將位置 5 上的數字旋轉 8 次。
如果位置 1 和 3 上的數字總和大於 8,則將位置 4 上的數字旋轉 5 次,否則將位置 2 上的數字旋轉 5 次。
如果位置 1 上的數字大於位置 4 上的數字,則將位置 4 上的數字旋轉 3 次,否則將位置 2 上的數字旋轉 3 次。
如果位置 3 和 1 上的數字總和大於 9,則將位置 2 上的數字旋轉 9 次,否則將位置 2 上的數字旋轉 2 次。
如果位置 4 和 3 上的數字總和大於 10,則將位置 4 上的數字旋轉 7 次,否則將位置 5 上的數字旋轉 7 次。
如果位置 3 上的數字大於位置 2 上的數字,則將位置 3 上的數字旋轉 2 次,否則將位置 4 上的數字旋轉 6 次。
如果位置 1 上的數字大於位置 3 上的數字,則將位置 1 上的數字旋轉 9 次,否則將位置 2 上的數字旋轉 9 次。
如果位置 3 上的數字是奇數,則將位置 3 上的數字旋轉 9 次,否則將位置 1 上的數字旋轉 5 次。
如果位置 3 和 5 上的數字總和大於 9,則將位置 3 上的數字旋轉 4 次,否則將位置 3 上的數字旋轉 9 次。
如果位置 3 上的數字大於位置 1 上的數字,則將位置 5 上的數字旋轉 1 次,否則將位置 5 上的數字旋轉 7 次。
如果位置 1 上的數字大於位置 3 上的數字,則將位置 2 上的數字旋轉 9 次,否則將位置 4 上的數字旋轉 6 次。
如果位置 2 和 3 上的數字總和大於 10,則將位置 2 上的數字旋轉 2 次,否則將位置 3 上的數字旋轉 6 次。
但火龍果因為記性太差,常常忘記密碼,你可以幫他解開密碼嗎?
### 格式
**輸入說明:** 輸入一個由五位數組成的數字$X$
**輸出說明:** 操作後的數字
**範例輸入1:**
```
00000
```
**範例輸出1:**
```
51926
```
**範例輸入2:**
```
12345
```
**範例輸出2:**
```
47782
```
**範例輸入3:**
```
48763
```
**範例輸出3:**
```
99588
```
---
<h2 style="text-align:center"> F. Hanoi </h2>
<p style="text-align:center"><font size=3>Time limit: 1s, Memory limit: 256Mb</font></p>
Tony老師最近被課業壓的喘不過氣來QQ,但喜歡動腦的他常常做一些動腦的題目作為休閒之舉,例如數獨啊、文字填空遊戲之類的,最近,Tony老師發現了一個很好玩的遊戲,那就是「河內塔」,遊戲規則如下:
你會有三根柱子分別編號為$1、2、3$,接著會有$n$個套環,分別編號$1、2、...、n-1、n$,開始時套環$i$會在柱子$a_i$的上面,並且每根柱子上的套環都依編號小到大由上到下排列,你的目標就是將每個套環$i$移到柱子$b_i$上,但注意,在操作時編號小的套環一定要在編號大的套環上面。
Tony老師看到這個就傻住了,不知道要如何下手,你可以幫幫他解開謎題嗎
### 格式
**輸入說明:**
第一行輸入一個整數$n$,代表有$n$個套環
第二行輸入$n$個整數$a_1, a_2, ..., a_n$
第三行輸入$n$個整數$b_1, b_2, ..., b_n$
**輸出說明:** 輸出最少步數的整個移動過程
($3 \leq n \leq 20$)
**範例輸入1:**
```
3
1 1 1
3 3 3
```
**範例輸出1:**
```
Ring 1 from 1 to 3
Ring 2 from 1 to 2
Ring 1 from 3 to 2
Ring 3 from 1 to 3
Ring 1 from 2 to 1
Ring 2 from 2 to 3
Ring 1 from 1 to 3
```
**範例輸入2:**
```
3
2 3 1
2 2 1
```
**範例輸出2:**
```
Ring 1 from 2 to 1
Ring 2 from 3 to 2
Ring 1 from 1 to 2
```
### 子題
- 子題1 (25%)
$\forall i \in [1, n], a_i=1, b_i=3$
- 子題2 (30%)
$\forall i \in [1, n], a_i\in[1,3], b_i=3$
- 子題3 (45%)
無特別限制