# 0110 第六次社課
||又名期末賽||
:::info
盡量**先想過一次**,如果真的想不出來,再參考解答
**不要複製貼上程式碼**,要多練習才會進步喔 !
好啦但還是希望有人會看 ```_(:3」∠)_``` 我寫得很辛苦
:::
很抱歉過了這麼久才寫題解 TAT,最近真的忙到要芬掉了呃呃呃
### 先前情提要一下
**期末賽範圍**:
輸入輸出、運算子、流程控制、迴圈、陣列、遞迴,總之就是社課內容大雜燴。
還有如果你想的話……一點點 DP ?
以及各種有關資訊和竹女的奇怪問題們。
這次的題目都**不需要用到 io 優化**,**數字最大只開到 long long**,可以不用擔心 ( ? )
btw 如果你覺得你的程式碼沒有問題,但輸出的小數總是差那一兩點意思……不要偷懶請**把全部的 int 或 float 宣告成 double** 謝謝。
~~假設你卡的是 7 的循環這題,那這個方法就對你沒用了哈哈~~
至於用 python 的捧油,對不起我救不了你,我跟 python 不熟 ( 猙獰臉 )
最後最後,感謝偉大的公活蕭伃肴幫我出了第二到六題,還有社師生的測資 orz。
### [m917. 你長得像 XX](https://zerojudge.tw/ShowProblem?problemid=m917)
**題目簡述:**
輸入一個字串 ~~例如茶碗蒸~~,輸出一行文字 ~~你長得像茶碗蒸~~。
:::spoiler **AC 程式碼:**
<br>
```cpp=
#include <iostream>
using namespace std;
int main()
{
string str;
cin >> str;
cout << "你長得像" << str << "!!!\n";
}
```
:::
<br>
然後給那些直接 AC 沒看到測資的人看這些莫名其妙的測資:

### [m961. 魷魚的數學作業](https://zerojudge.tw/ShowProblem?problemid=m961)
**題目簡述:**
輸入一個整數 n,接下來輸入 n 行數字。每行為一個正整數 m。
輸出這 n 個數字的平均值。
:::spoiler **AC 程式碼:**
<br>
```cpp=
#include <iostream>
using namespace std;
int main()
{
double n, a, ans = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a;
ans += a;
}
cout << ans / n << "\n";
}
```
:::
<br>
### [m962. 肴肴的上課公車](https://zerojudge.tw/ShowProblem?problemid=m962)
**題目簡述:**
輸入兩個正整數 H、M,代表肴肴起床的時間,分別為小時和分鐘。
根據此二數判斷肴肴是否會遲到,若可以準時到校,輸出 "準時到校!!!"
反之,則輸出 "遲到:("
:::spoiler **AC 程式碼:**
<br>
```cpp=
#include <iostream>
using namespace std;
int main()
{
int h, m;
cin >> h >> m;
if (h > 6) cout << "遲到:(\n";
else if (m > 30) cout << "遲到:(\n";
else cout << "準時到校!!!\n";
}
```
:::
<br>
### [m963. Kookie的美術畫作](https://zerojudge.tw/ShowProblem?problemid=m963)
**題目簡述:**
輸入一個正整數 n,接下來輸入 n 個數字 S 代表每一幅畫的分數。
依序輸出被裱起來的畫作編號 L。
:::spoiler **AC 程式碼:**
<br>
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n, a;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a;
if (a > 7) cout << i + 1 << " ";
}
}
```
:::
<br>
### [m964. 生米的理財利率](https://zerojudge.tw/ShowProblem?problemid=m964)
**題目簡述:**
輸入兩個正整數 n、p,分別代表本金與經過年數。
輸出 n 年後可以賺到多少錢,以複利計算。
:::spoiler **AC 程式碼:**
<br>
```cpp=
#include <iostream>
using namespace std;
int main()
{
double p, n;
cin >> p >> n;
for (int i = 0; i < n; i++) p *= 1.1;
cout << p << "\n";
}
```
:::
<br>
### [m965. 善良的社幹們](https://zerojudge.tw/ShowProblem?problemid=m965)
**題目簡述:**
輸入一個正整數 n,接下來輸入 n 個數字。
輸出這 n 個數字的標準差。
> 小提示:
> 代公式
:::spoiler **AC 程式碼:**
<br>
```cpp=
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double n, l, s = 0, a = 0, ans;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> l;
s += l * l;
a += l;
}
cout << sqrt ((s - a * a / n) / n);
}
```
:::
<br>
### [m922. 7 的循環](https://zerojudge.tw/ShowProblem?problemid=m922)
**題目簡述:**
輸入兩個正整數 n、d,分別代表被除數和小數位數。
輸出 n 除以 7 的答案並取到小數點後第 d 位數。
> 小提示:
> 想一下長除法是怎麼做的
> btw 這題用不了 setprecision( ) 了,精確度不夠。
:::spoiler **AC 程式碼 (直觀版):**
<br>
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n, d, t;
cin >> n >> d;
cout << n / 7 << ".";
t = (n % 7) * 10;
for (int i = 0; i < d; i++)
{
cout << t / 7;
t = (t % 7) * 10;
}
}
```
:::
<br>
:::spoiler **AC 程式碼 (半夜腦子不清楚版):**
<br>
```cpp=
#include <iostream>
using namespace std;
int main()
{
int n, d, t, p[6] = {1, 4, 2, 8, 5, 7};
cin >> n >> d;
cout << n / 7 << ".";
t = n % 7;
if (!t)
{
for (int i = 0; i < d; i++) cout << 0;
return 0;
}
else if (t == 1) t = 1;
else if (t == 2) t = 3;
else if (t == 3) t = 2;
else if (t == 4) t = 5;
else if (t == 5) t = 6;
else t = 4;
for (int i = 0; i < d; i++)
{
cout << p[t - 1];
t++;
if (t == 7) t = 1;
}
}
```
:::
<br>
### [m650. 水仙好吃,大王花也很好吃](https://zerojudge.tw/ShowProblem?problemid=m650)
**題目簡述:**
輸入一個正整數 a,判斷此數是否為自冪數。
如果是則輸出 "YES",否則輸出 "NO"。
> 小提示:
> 用 while loop 一個一個取出數字去計算
> 這題需要用到社課曾經提到過的 pow ( n , a )
:::spoiler **AC 程式碼:**
<br>
```cpp=
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
long long n, a, sum = 0, t[10], cnt = 0;
cin >> n; a = n;
while (n > 0)
{
t[cnt] = n % 10;
n /= 10;
cnt++;
}
for (int i = 0; i < cnt; i++) sum += pow(t[i], cnt);
cout << ((sum - a)? "NO" : "YES") << "\n";
}
```
:::
<br>
### [m921. 築呂姿顏開張](https://zerojudge.tw/ShowProblem?problemid=m921)
**題目簡述:**
輸入一個整數 p,代表今日與社長合照的價格。
接下來輸入四行數字,每行有兩個數字 m、n,分別代表該餐點編號和餐點份數。
餐廳酌收初始花費的 10 % 服務費,並且如果出示與社長的合照 可抵免服務費。
輸出最少花費以及是否需要與社長合照。
> 小提示:
> 用一個陣列儲存個餐點的價格會比較簡單明瞭
> 如果服務費大於與社長合照的價錢,則與社長合照。
:::spoiler **AC 程式碼:**
<br>
```cpp=
#include <iostream>
using namespace std;
int main()
{
double p, m, n, sum = 0;
int menu[6] = {150, 330, 200, 180, 195};
cin >> p;
for (int i = 0; i < 5; i++)
{
cin >> m >> n;
sum += menu[i] * n;
}
if (sum * 0.1 < p)
cout << (int)(sum * 1.1) << " " << 0;
else cout << sum + p << " " << 1;
}
```
:::
<br>
### [m960. 最佳上課效益](https://zerojudge.tw/ShowProblem?problemid=m960)
**題目簡述:**
輸入 7 個正整數 n~i~ ( 0 <= i <= 6 ),分別代表今日七節課的上課點數。
上課效益 = 體力點 × 該節課點數
總效益等於七節課效益之和,輸出最佳上課總效益。
> DP 小提示:
> 倍率 3 → 倍率 0
> 倍率 2 → 倍率 3
> 倍率 1 → 倍率 2
> 倍率 0 → 倍率 3 / 2 / 1
> 推得 dp 式:
> dp [ i ] [ n ] = dp [ i - 1 ] [ n + 1 ] + a [ i ] × n
> dp [ i ] [ 0 ] = max ( dp [ i - 1 ] [ 0 ], dp [ i - 1 ] [ 1 ], dp [ i - 1 ] [ 2 ], dp [ i - 1 ] [ 3 ])
:::spoiler **AC 程式碼 ( DP 解 ):**
<br>
```cpp=
#include <iostream>
using namespace std;
int main()
{
int a[7], dp[10][4] = {0}, ans = 0;
for (int i = 0; i < 7; i++) cin >> a[i];
dp[0][3] = a[0] * 3;
for (int i = 1; i < 7; i++)
{
dp[i][1] = dp[i - 1][2] + a[i];
dp[i][2] = dp[i - 1][3] + a[i] * 2;
dp[i][3] = dp[i - 1][0] + a[i] * 3;
dp[i][0] = max (dp[i - 1][0] , max (dp[i - 1][1] , max (dp[i - 1][2] , dp[i - 1][3])));
for (int j = 0; j < 4; j++)
if (dp[i][j] > ans) ans = dp[i][j];
}
cout << ans << "\n";
}
```
:::
<br>
:::spoiler **AC 程式碼 ( 遞迴社師解 ):**
<br>
```cpp=
#include <iostream>
using namespace std;
int x[7], MAX;
void dfs(int i, int hp, int val)
{
if(i >= 7) MAX = max(MAX, val);
else if(hp > 0) dfs(i+1, hp-1, val+hp*x[i]), dfs(i+1, 3, val);
else dfs(i+1, 3, val);
}
int main()
{
for(int i = 0; i < 7; ++i) cin >> x[i];
dfs(0, 3, 0);
cout << MAX << "\n";
}
```
:::
<br>
:::warning
這題理論上是防破台題,但看起來是沒什麼難度,因為已經有四個人寫出來了
然後我一開始用的是 DP
~~也有可能是我遞迴太爛,或是測資太小~~
然後小小題外話就是,除了社員以外,其實也有一些神奇人物:place_of_worship:混進來寫了。
大家可以去膜拜一下 ( ? )
還有我還是很不解到底怎麼猜出沂風園的,竹女的人都未必知道這個地方了 XD
:::
### 本學期結語
其實我一直有在想到底要不要打,既然你看到這一篇了,很顯然我最後還是打了。
雖然我不知道要說什麼 XD
就先從各位寫的題目開始好了,其實我真的沒有想到寫題目的人這麼多 :sob::sob:
常常半夜看到有人在寫扣,我真的為你的肝默默心疼一把。
之前 π 在我高一一點半在忙的時候叫我早點睡,我現在叫你們早點睡,如果是半夜看就更不應該了 ==
然後我聽說有很多人想去考 6 月的 APCS ,我覺得可以趁寒假期間好好刷題,在這段期間內也有很多比賽例如 **TOI 初選**、**ytp**、**學科校內賽**,還有如果你想的話……考幹 ?
想豐富自己的程式經驗 ~~和學習歷程~~,我覺得很適合參加。
如果你寒假不想寫程式但想看 BL 小說,我推薦你看 「**C 語言修仙**」,我覺得作者真的很有料,你可以學到很多常用的競程、資安、人工智慧知識,順便複習上學期社課內容。
嚴格來說,我就是看了這本才決定要開始寫程式的。
~~如果作者不要把拿到 IMO 和 IOI 的金牌寫得像吃飯喝水一樣簡單就更好了。~~
最後,我個人認為義大利麵就應該拌 42 號混泥土,因為這個螺絲釘的長度很容易直接影響到挖掘機的扭矩。你往裡砸的時候,一瞬間他就會產生大量的高能蛋白,俗稱 UFO,會嚴重影響經濟的發展,以至於對整個太平洋,和充電器的核污染。再或者說透過這勾股定理很容易推斷出人工飼養的東條英機,他是可以捕獲野生的三角函數,所以說不管這秦始皇的切面是否具有放射性,川普的 N 次方是否有沈澱物,都不會影響到沃爾瑪跟維爾康在南極匯合。
真的超級感謝各位資研社的同學,希望各位有學到東西 orz