建電上學期大社賽詳解
By: Yeedrag & Lemon
前10圖表:
答對率一覽:
原本預期難度:
Lemon:
高一應該會有兩個4分以上
平均應該約兩題
Yeedrag:
至少一個高一破台,pD AC率<20%
預期難度分布: pA->pC->pB->pE->pD
pA.建中電研大赦賽!
解答:
直接輸出就好。
#include<iostream>
using namespace std;
int main(){
cout<<"Hello, CKEISC!"<<endl;
}
這題沒有輸入 > <
pC.大米與他的毒瘤加密
題目:
依據字串長度的奇偶性,
決定使用哪個加密用字串。
並利用字母的順序(a~z)對照加密用字串,
輸出加密後的字串。
替換式密碼的簡化版(?
我們要做ㄉ
先判斷字串長度是奇數or偶數
然後利用ASCII的特性:
我們讓一個小寫字母減去'a',
就會剛好是字母的順序!
e.g.
'a' - 'a' = 0
'b' - 'a' = 1
'z' - 'a' = 25
CODE
#include <iostream>
#include <string>
using namespace std;
int main() {
string s1, s2, p;
cin >> s1 >> s2 >> p;
for(int i = 0; i < p.size(); ++i) {
if(p.size()%2 == 1) cout << s1[p[i] - 'a'];
else cout << s2[p[i] - 'a'];
}
cout << '\n';
}
熟悉對字串ㄉ操作
pB.咖哩拌飯
題目:
每個咖哩飯的喜愛值都由三個變數\(a,b,c\)決定,請找出喜愛度最高的咖哩飯並且輸出他是第幾個。
做法:
直接實作,用迴圈跑過所有咖哩飯,再用兩個變數紀錄目前最大的和最大的編號是多少。
喜愛值有可能加起來超小!
扣的:
#include<iostream>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;
int t;
cin>>t;
int biggest = -2147483647;//一個很小的值
int index = -1;//紀錄目前最小的索引值
for(int i=1;i<=t;i++){
int d,e,f;
cin>>d>>e>>f;
int sum = (d*a)+(e*b)+(f*c);//這碗飯的喜愛值
if(sum>biggest){
index = i;
biggest = sum;
}
}
cout<<index<<endl;
}
pE.發電機問題
題目:
可能畫張圖(?
以範例一為例:
上面是電場值,下面是座標w
你會發現我不會畫圖
反正其實就是解我給的那條柿子:
\(\sum^{n}_{i=1} k - d_{i}p\)
\(=\sum^{n}_{i=1} k - p|s - x_{i}|\)
就是把每個發電機的值相加,
然後我們希望它最大而已。
如果你看不懂\(\sum^{n}_{i=1}\)反正就是把\(n\)個點的東東都加起來(?
做法
\(\sum^{n}_{i=1} k - p|s - x_{i}|\)
你們作為數學大師,
會發現\(k, p\)是常數
且因為\(p > 0\)所以我們會希望
\(\sum^{n}_{i=1} |s - x_{i}|\)盡量小
\(s\)只要找中間(\(x_{\frac{n}{2}}\))就好ㄌ
然後就把值算出來(?
CODE
#include <iostream>
using namespace std;
int main() {
int n, k, p;
cin >> n >> k >> p;
long long int x[n];
for(int i = 0; i < n; ++i) {
cin >> x[i];
}
long long int cnt = 0; //記得long long
long long int s = x[n/2];
for(int i = 0; i < n; ++i) {
cnt += k - p*abs(x[i] - s);
}
cout << cnt << '\n';
return 0;
}
pD.富豪雷夢與神偷大米
題目:
請你找到一組數對\((x,y)\),使\(H(x,y) = r\),
而當中x,x-又是所有可能中最小的那個,並且\(x,y\)皆為正整數,
且\(x\)為所有可能性中最小的那個。
觀察一下式子:
\(r = x^2+2xy+x+1\)
把\(1\)移過去得:
\((r-1) = x^2+2xy+x\)
會發現:
-
\(2xy\)恆為偶數
-
\(x^2+x\)恆為偶數
\(r-1\) 不可能是奇數!
也就是 \(r\)不可能為偶數!
條件1:
繼續研究式子:
\((r-1) = x^2+2xy+x\)
右式提\(x\)出來:
\((r-1) = x(x+2y+1)\)
到這邊不難看出一個策略:
\(x\)要是一個最小的正整數,
那我們可以取\(x=1\)來做!
繼續研究式子:
代入\(x=1\):
\((r-1) = 2y+2\)
\(y=\frac{(r-3)}{2}\)
故我們得出一個策略:
\(r\)為奇數時,有答案
\(x=1,y=\frac{(r-3)}{2}\)
然後就吃WA了。
回頭看一下條件:
\(x,y\)皆為正整數
如果 \(r=1\):
\(x = 1, y = -1\)
如果\(r=3\):
\(x=1,y=0\)
#include<iostream>
using namespace std;
int main(){
long long int r;
cin>>r;
if(r%2==0||r==1||r==3){
cout<<"NO"<<endl;
} else {
cout<<1<<" "<<(r-3)/2<<endl;
}
}
Code:
頒獎la
高二前三名
- wayne1215(5AC)
- liquid(3AC)
- henry652213(3AC)
高一前三名
- nameless35722 (4AC)
- aww (3AC)
- verstand (3AC)
堅忍不拔獎
justingod
pB錯了6次後AC,so dian...
壓線狂魔獎
nameless35722
結束前11秒AC www
最佳毒瘤獎
rain0130
#include<iostream>
using namespace std;
int main()
{
int a,b,c,x;
cin>>a>>b>>c>>x;
int y[x*3],q=0;
for(int n=0;n<x*3;n++)
{
cin>>y[n];
}
int p=y[0]*a+y[1]*b+y[2]*c;
for(int n=3;n<x*3;n+=3)
{
int z=y[n]*a+y[n+1]*b+y[n+2]*c;
if(z>p)
{
p=z;
q=n;
}
}
cout<<q/3+1<<'\n';
}
把全部東西存在一起是甚麼操作w
然後還AC
沒得獎也沒關係
下禮拜有小社的社賽ㄛ
學弟報寒訓la
寒訓特別好玩 ㄎㄎ
這學期最後一堂大社QAQ
下學期也要來電研找我們ㄛ
大社賽詳解
By yeedrag
大社賽詳解
- 340