---
# System prepended metadata

title: 0110 第六次社課

---

# 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 沒看到測資的人看這些莫名其妙的測資：

![image](https://hackmd.io/_uploads/BkrdsnUtT.png =70%x)

### [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
