競賽日期:110/11/10(三),可攜帶參考書、隨身碟。
7:30-8:00 報到
8:00-8:30 競賽須知說明
8:30-8:50 選手準備時間
8:50-11:50 實作題(一) 7題 3小時
11:50-1:00 午餐(有便當)、午休
1:00-3:00 實作題(二) 5題 2小時
3:00-4:20 整理成績
4:20-4:50 頒獎
p1. 鋪磁磚問題
輸入n,代表有一個1×n的地板,你可以使用1×1、1×2、1×3大小的磁磚去鋪它。請問有幾種鋪法?
解法:x+2y+3z=n
p2. 製作看板
第一行輸入R、C,第二行輸入一個字串,第三行輸入R×C的字元,「#」代表不可放文字,「.」代表可以放文字,將字串填入「.」後輸出。如果字串長度小於「.」的長度,則將剩餘的「.」平分在文字前後。
解法:簡單題。假設字串長度是4,空格數是8,即○○●●●●○○,因此要先空(8-4)/2=2。
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0), cin.tie(0);
int r, c;
string s;
cin >> r >> c >> s;
char arr[r][c], blank=0;
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
cin >> arr[i][j];
if(arr[i][j]=='.') blank++;
}
}
int a = (blank-s.length())/2;
int index = 0;
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
if(arr[i][j]=='#') cout << '#';
else{
if(index < a || index >= a+s.length()){
cout << '.';
index++;
}else{
cout << s[index-a];
index++;
}
}
}
cout << '\n';
}
}
p3. 質數切割法
輸入L,代表木棒長度,輸出最小切割成本。將這條木棒放到工作台上,切割成本為木棒長度L。將木棒分割成長度皆為質數的兩段。如果該段木棒還可以再分割,則再把該木棒放在工作台上,切割成本為該段長度。舉例:
❶ (10) → 3 + (7) → 2 + (5) → 2 + 3,成本為10+7+5=22。
❷ (10) → (5) + (5) → 2+3+2+3,成本為10+5+5=20。
所以 ❷ 比 ❶ 還要好。
p4. 隊伍分配
p5. 大雄的煩惱
p6. 末日危機
p7. 旅行推銷員問題
p8. 賓果遊戲
p9. 報表排序
p10. 病毒傳播
p11. 機器人出任務
p12. 雙洞推盤遊戲
題目PDF:https://drive.google.com/drive/folders/1TBsvLe8jVGh-M3aJVC7t3XCFkpJs6HVn?usp=sharing