---
# System prepended metadata

title: ☄️CSF程速勁賽 決賽題庫
tags: [CSF]

---

# ☄️CSF程速勁賽 決賽題庫 
###### tags: `CSF`
## 202107 CSF程速勁賽 決賽 1-繪製圖形
**1. 設計說明：
請撰寫一程式輸入繪製模式、圖形個數，以 * 號繪製出對應圖形，每一列最右邊的 * 號不能有空白出現，如下所示：**
（圖中的黃點代表空格）![](https://i.imgur.com/BAnlUUq.png)
![](https://i.imgur.com/i2BzbXr.png)
```python=
m=int(input())
n=int(input())

for i in range(n*2):
   if i%2==m:
     print('  *\n * *\n*   *\n*   *')
   else : 
     print('*   *\n*   *\n * *\n  *')

```
## 202107 CSF程速勁賽 決賽 2-最少月台數
1. 設計說明：
請撰寫一程式輸入火車到某一站的抵達與離開時間，計算並輸出不讓到站火車延遲的最少月台數。以範例輸入1為例：

輸入值為

1.2,1.5,1.5,2.3
2.3,2.8,2.5,2.5
代表共有4列火車，其抵達與離開某一站的時間如下表所示：

火車	a	b	c	d
抵達時間	1.2	1.5	1.5	2.3
離開時間	2.3	2.8	2.5	2.5
則需要最少月台數為3，其中

火車	時間	抵達/離開	月台
a	1.2	抵達	1
b	1.5	抵達	2
c	1.5	抵達	3
a	2.3	離開	1
d	2.3	抵達	1
c	2.5	離開	3
d	2.5	離開	1
b	2.8	離開	2
註：火車a的離開時間與火車d的抵達時間一樣，可共用一個月台

![](https://i.imgur.com/le5XB3e.png)
```python=
t_in=str(input())
arrive=[eval(i) for i in t_in.split(',')]
t_out=str(input())
leave=[eval(i) for i in t_out.split(',')]

time=[]
for i in range(len(arrive)):
  time.append((arrive[i],1))
  time.append((leave[i],0))
time.sort()

m=0
c=0
for _,i in time:  
   if i :
     c+=1
     m=max(m,c)
   else : 
     c-=1
print(m)
```
```python=
from xmlrpc.client import MININT


inArr=input().split(",")
outArr=input().split(",")

for i in range(len(inArr)):
    inArr[i]=eval(inArr[i])
for i in range(len(outArr)):
    outArr[i]=eval(outArr[i])


# print(inArr)
# print(outArr)

for i in range(len(inArr)):
    for j in range(i,len(inArr)):
        if inArr[i]>inArr[j]:

            tmp=inArr[i]
            inArr[i]=inArr[j]
            inArr[j]=tmp

            tmp=outArr[i]
            outArr[i]=outArr[j]
            outArr[j]=tmp


# print(inArr)
# print(outArr)


arr=[]
for i in range(len(inArr)):
    if len(arr)==0:
        arr.append([inArr[i],outArr[i]])
        continue

    minLen=999999
    minIn=0
    minOut=0
    minIndex=0

    tmp=0
    for j in range(len(arr)):
        if inArr[i]>=arr[j][1] and outArr[i]>=arr[j][1]:
            tmp+=1
            if inArr[i]-arr[j][1]<minLen:
                minLen=inArr[i]-arr[j][1]
                minIn=inArr[i]
                minOut=outArr[i]
                minIndex=j

    if tmp==0:
        arr.append([inArr[i],outArr[i]])
    else:
        arr[minIndex][1]=outArr[i]

# print(arr)
print(len(arr))
```
```python=
# t_in=str(input())
# arrive=[eval(i) for i in t_in.split(',')]
# t_out=str(input())
# leave=[eval(i) for i in t_out.split(',')]

# arrive.sort()
# leave.sort()

# ans=0
# m=0

# seq = (i/10 for i in range(0, 240))
# for i in seq:
#       if i in arrive : 
#                ans+=1
#                m=max(ans,m,arrive.count(i))       
#       if i in leave : 
#                ans-=1
# print(m)

```
## 202107 CSF程速勁賽 決賽 3-最大滿意人數
1. 設計說明：
系統要幫民眾安排施打疫苗的時段，會先排定預設時段（0, 1, 2, ...）進行施打，但民眾可依自己想施打的的滿意時段進行變更，方式如下：

預設時段：依順序安排（0, 1, 2, ...），每個時段只有一人。
變更方式：
每人都有一個滿意時段。
時段只能變更一次。
除非能換到自己滿意的時段，否則不願意變更。
請撰寫一程式，依序輸入每一位民眾的滿意時段，計算並輸出有幾位民眾可以在自己的滿意時段施打疫苗。以範例輸入1為例：

輸入值為

2,2,0,5,3,5,7,4

![](https://i.imgur.com/JbGfCwd.png)
![](https://i.imgur.com/P4IRKNS.png)
```python=


def f(lst,ch_t=None):
   if ch_t is None :   #初始化
      ch_t=set(range(len(lst)))
   if len(ch_t)==1:
      return ch_t

   like=set(lst[x] for x in ch_t)  #取出
   remove_set=ch_t-like    #沒人滿意的時段

   if remove_set:
      ch_t-=remove_set   #以沒人滿意排除不能變更的人
      f(lst,ch_t)
   return ch_t

   
n=input()
a=[eval(i) for i in n.split(',')]
peo=f(a)
print(len(peo))

```
## 202112 CSF程速勁賽 決賽 1-小黑與他的便當店戀情
**小黑暗戀巷口便當店的女店員。**

**為了能跟可愛的店員見上一面，他常常去店裡消費，而且他都點店裡最貴的150元豪華便當，希望讓店員覺得他是個豪氣的人。**

**最近便當店推出集點活動，每次買便當可以拿到1點，只要集到5點就可以折50元。**

**小黑覺得這是老闆在暗中撮合他跟女店員，於是決定把這個月的餐費都拿來買這家的便當，請問他可以買幾個便當?**
![](https://i.imgur.com/01q64C8.png)
```python=
money=eval(input())
point=0#點數
food=0#便當
while(money>=150):
    point+=1
    money-=150
    food+=1
    if point==5:
        point=0#點數規0
        money+=50#便當變為100
print(food)
```
```python=
n=int(input())

cnt=0

while n>=150:
    cnt+=1
    n-=150
    if cnt%5==0:
        n+=50
print(cnt)
```
```python=
n=int(input())
p=0
a=0
while n>=0 : 
   if p>=5:
     p-=4    #超過5點又可以拿到1點 =4
     n-=100  #打折50塊錢，所以這個便當只要100
   else : 
     n-=150
     p+=1
   a+=1  
print(a)
```
## 202112 CSF程速勁賽 決賽 2-多少個騎士

![](https://i.imgur.com/UBnNVtW.png)
騎士（Knight) 是西洋棋中的一種棋子。走法是走「日」字，或英文字母大写的 “L” 形：即先向左（或右）走1格，再向上（或下）走2格；或先向左（或右）走2格，再向上（或下）走1格。

請問在一個 $m * n$ 大小的棋盤下，最多可以同時放下幾個騎士，使得任一個騎士無法吃掉其他騎士(只走一步的情況)？

2. 輸入輸出
**輸入說明**
第一列：$m, n$ 分別代表棋盤的長、寬($1 \leq m, n \leq 500$)

**輸出說明**
輸出最多可以同時放下幾個騎士，使得任一個騎士無法吃掉其他騎士
![](https://i.imgur.com/SVQgcxV.png)
![](https://i.imgur.com/2Ngr4XA.png)
![](https://i.imgur.com/8mmfspj.png)
![](https://i.imgur.com/gnZtIvV.png)

![](https://i.imgur.com/TAcyRIV.png)

```python=
# by TFH
m,n=(input().split(" "))
m=int(m)
n=int(n)
def f(n,m):  
    if n<m:
        return f(m,n)
    elif m==1:
        return n
    elif m==2:

        if (n%4>1):
            return (n//4)*4+2*2  #4個4個一組，有幾組 
        else:
            return (n//4)*4+(n%4)*2
             #奇數的話中間可以多放一個
    else:
        return (n*m+1)//2
print(f(m,n))
```
## 202112 CSF程速勁賽 決賽 3-5倍券精算師
![](https://i.imgur.com/yn1oaXN.png)
**100為單位**
![](https://i.imgur.com/oXg4Po8.png)
```python=
a=[int(eval(x)/100) for x in input().split(' ')]
dp=[False]*51
dp[0]=True
for i in range(len(a)):
  for j in range(50,a[i]-1,-1):
    dp[j]=dp[j] or dp[j-a[i]]
  if dp[50]:
    print(i+1)
    break
```

## 202205 CSF程速勁賽 決賽 2-三角旗設計圖
1. 設計說明：
校慶的班級布置中，你的工作是依照需求完成三角旗的設計。
三角旗是由若干個倒立實心的等腰三角形組成，數量不超過5個。
請設計一程式，根據使用者輸入的三角形腰長，用 * 印出對應三角旗的形狀。

2. 輸入輸出：
輸入說明
不超過5個數字（大於等於0的數字），代表等腰三角形的腰長（以半形空格為間隔）

輸出說明
用 * 輸出對應的三角旗形狀，每個三角形之間需有一個半形空格
(每一列的最後一個 * 右側沒有空格)
![](https://i.imgur.com/tJtvVId.png)

```py=

arr=[int(i) for i in input().split(" ")]

ans=[]

for i in range(len(arr)):

    for j in range((arr[i])):
        ans.append(("*"*(j+1)).ljust(max(arr)))

    for j in range((arr[i])-1):
        ans.append(("*"*(arr[i]-j-1)).ljust(max(arr)))

    if arr[i]!=0:
        ans.append((" ")*(max(arr)))


# print(ans)

for i in range((max(arr))):
    tmp=""
    for j in range(len(ans)-1):
        tmp+=ans[j][i]
    print(tmp.rstrip(),end="")
    # print("o",end="") #取消註解可以證明沒空白
    if i != (max(arr))-1:
        print()

```

