长沙理工大学ACMore编程协会2018年新生赛(重现赛)
A 送氣球.jpg
鏈接:https://ac.nowcoder.com/acm/contest/318/A
來源:牛客網(wǎng)
題目描述
ACM-ICPC程序設(shè)計(jì)大賽是大學(xué)級(jí)別最高的腦力競(jìng)賽,素來被冠以"程序設(shè)計(jì)的奧林匹克"的尊稱。大賽至今已有近40年的歷史,是世界范圍內(nèi)歷史最悠久、規(guī)模最大的程序設(shè)計(jì)競(jìng)賽。比賽形式是:從各大洲區(qū)域預(yù)賽出線的參賽隊(duì)伍,于指定的時(shí)間、地點(diǎn)參加世界級(jí)的決賽,由1個(gè)教練、3個(gè)成員組成的小組應(yīng)用一臺(tái)計(jì)算機(jī)解決7到13個(gè)生活中的實(shí)際問題。在正式賽場(chǎng)中,一個(gè)隊(duì)伍每解決一個(gè)新的問題就會(huì)有一個(gè)相應(yīng)的氣球作為獎(jiǎng)勵(lì)送到這個(gè)隊(duì)伍所在的位置。
Dillonh作為這次ACM-ICPC的志愿者,當(dāng)然是時(shí)刻關(guān)注著場(chǎng)上的過題情況的,每當(dāng)有一個(gè)隊(duì)伍通過新的問題的時(shí)候,他就會(huì)馬上送上氣球。但由于參賽隊(duì)伍實(shí)在是太多了,他也不清楚每個(gè)隊(duì)伍得到了多少個(gè)氣球。在比賽結(jié)束之后,他拿到了一份這場(chǎng)比賽的題目提交情況,他想知道現(xiàn)場(chǎng)參加比賽的隊(duì)伍每個(gè)隊(duì)伍能獲得氣球,聰明的你能幫幫他嗎?
輸入描述:
第一行包含一個(gè)整數(shù)T(T≤10),表示總共有T組測(cè)試樣例;
第二行輸入一個(gè)整數(shù)n,m;
n表示有多少個(gè)隊(duì)伍參加這次的比賽(1≤n≤50);
m表示有多少條提交記錄(1≤m≤1000);
接下來輸入m行,每行輸入格式如下:
team_id problem_id submit_status
team_id 代表著隊(duì)伍的編號(hào)(1 <= team_id <= n);problem_id代表著題目編號(hào)(為A~M的大寫字母);submit_status代表著這個(gè)題目提交的結(jié)果(可能是"AC",“PE”,“TLE”,“MLE”,“WA”,“RE”,"CE"其中的一種)。
hint:每次提交只有提交結(jié)果是"AC"的題目才可以得到氣球。如果一個(gè)隊(duì)伍如果通過同一個(gè)題目多次,他也只能獲得一個(gè)氣球。
輸出描述:
對(duì)于每組樣例
第一行輸出一行“Case #x:”,x表示當(dāng)前為第幾組樣例(詳細(xì)見樣例);
第二行輸出n個(gè)數(shù)(每?jī)蓚€(gè)數(shù)之間用空格隔開)代表著第 i 個(gè)隊(duì)可以獲得的氣球數(shù)量。(注意不要在每一行的末尾輸出多余的空格)。
示例1
輸入
輸出
Case #1: 2 1 1 1 0模擬,set去重。
#include<bits/stdc++.h> using namespace std; const int maxn=1000; set<char>s[maxn]; int main(){int t;cin>>t;int flag=1;while(t--){int n,m;cin>>n>>m;for(int i=0;i<m;i++){int index;char b;string c;cin>>index>>b>>c;if(c=="AC"){s[index].insert(b);}}printf("Case #%d:\n",flag);for(int i=1;i<n;i++){cout<<s[i].size()<<" ";s[i].clear();}cout<<s[n].size()<<endl;s[n].clear();flag++;}}B 簽到題
鏈接:https://ac.nowcoder.com/acm/contest/318/B
來源:牛客網(wǎng)
題目描述
IG牛逼!!!
眾所周知,IG是英雄聯(lián)盟S8世界總決賽冠軍,奪冠之夜,數(shù)億人為之歡呼!
賽后某百分百勝率退役ADC選手的某表情包意外走紅,某茍會(huì)長看到此表情包也想模仿。
于是有n個(gè)友愛的萌新決定每人都送會(huì)長一根長為ai面包。(數(shù)據(jù)保證沒有面包的長度相等)
會(huì)長無聊時(shí)把面包擺成一排,他驚人地發(fā)現(xiàn)他喜歡這樣一類區(qū)間,區(qū)間[i, j]滿足條件:
區(qū)間里的面包沒有比左端點(diǎn)i號(hào)面包短的,同時(shí)也沒有比右端點(diǎn)j號(hào)面包長的。
Gey會(huì)長在思考這樣一個(gè)問題:
所有滿足條件的區(qū)間中j-i的最大值是多少?
輸入描述:
t組數(shù)據(jù)。 每組樣例第一行輸入整數(shù)n,接下來一行輸入n個(gè)正整數(shù)。 (t≤30, n≤1000, ai≤1000000)輸出描述:
輸出滿足條件的區(qū)間中j-i的最大值。示例1
輸入
輸出
1 0暴力,雙重遍歷確定起點(diǎn)和終點(diǎn),終點(diǎn)為這一區(qū)間最大值時(shí)更新區(qū)間長度。
#include<bits/stdc++.h> using namespace std; const int maxn=1005; int a[maxn]; int main(){int t;cin>>t;while(t--){int n;cin>>n;for(int i=1;i<=n;i++)scanf("%d",&a[i]);int ans=0;for(int i=1;i<n;i++){int mx=a[i];for(int j=i+1;j<=n;j++){if(a[j]<a[i]) break;mx=max(mx,a[j]);if(mx==a[j])ans=max(ans,j-i);}}cout<<ans<<endl;}return 0; }G LLLYYY的數(shù)字思維
鏈接:https://ac.nowcoder.com/acm/contest/318/G
來源:牛客網(wǎng)
題目描述
LLLYYY很喜歡寫暴力模擬貪心思維。某一天在機(jī)房,他突然拋給了隊(duì)友ppq一
個(gè)問題。問題如下:
有一個(gè)函數(shù)f ():
int f(int x){
int tmp = 0;
while(x != 0){
tmp += x % 10;
x /= 10;
}
return tmp;
}
接著LLLYYY給定一個(gè)整數(shù) c,要求在c范圍內(nèi)找兩個(gè)整數(shù)a和b,使得a + b = c,且f(a) + f(b)的值最大。
輸入描述:
輸出描述:
對(duì)于每一個(gè) c,找到一組 a,b ,使 f(a) + f(b)最大 且 a + b = c,輸出這個(gè)f(a) + f(b)(0≤a,b≤c)。示例1
輸入
輸出
17 91說明
在第一個(gè)樣例中,可以選擇 a = 17,b = 18,這樣得到的f(a) + f(b)值最大為 17。 在第二個(gè)樣例中, 可以選擇 a = 5000000001,b = 4999999999.這樣得到的f(a) + f(b)值最大為 91。9越多越好
#include <bits/stdc++.h> using namespace std; typedef long long ll; int f(ll x){int tmp = 0;while(x != 0){tmp += x % 10;x /= 10;}return tmp; } int main(){ll c,n;while(cin>>c){n=0;int s=0;while((n*10+9)<c) n=n*10+9;printf("%d\n",f(n)+f(c-n));}return 0; }J 王者榮耀
鏈接:https://ac.nowcoder.com/acm/contest/318/J
來源:牛客網(wǎng)
題目描述
“無論何時(shí)何地,都會(huì)遵守約定”。“奮力逃吧”。“關(guān)于取下敵人性命這件事,也從不失約”。
小懶蟲zmx平時(shí)最喜歡玩的游戲就是《王者榮耀》,在這款游戲中它也最喜歡百里守約這個(gè)英雄。最近,zmx準(zhǔn)備沖國服百里,所以它開始練英雄,你有很多個(gè)時(shí)間段來練習(xí)英雄,每個(gè)時(shí)間段有一個(gè)開始時(shí)間點(diǎn)和結(jié)束時(shí)間點(diǎn),以及可以獲得的熟練度。不過現(xiàn)在你可以隨意修改任意練習(xí)時(shí)間段的開始和結(jié)束時(shí)間點(diǎn),但是你不能修改時(shí)間段的長度和獲得的熟練度!由于要學(xué)習(xí),你只能在固定時(shí)間段玩游戲,問你最多可以獲得多少熟練度?
例如:你可以把[2,3),修改為[1,2)或者[3,4)等等,他們的長度都是1。
注意:對(duì)于某個(gè)時(shí)間段,不管你有沒有修改,必須練完整個(gè)時(shí)間段長度才能獲得熟練度!
輸入描述:
第一行,三個(gè)整數(shù)n,S,T(0<n<=1000,0<S<T<1000)代表n個(gè)時(shí)間段和你能在[S,T)時(shí)間段內(nèi)玩游戲。接下來n行,每行三個(gè)整數(shù)a,b(0<a<b<1000),c(0<c<1e7),用空格分開,代表時(shí)間段起始時(shí)間[a,b)和可以獲得的熟練度。輸出描述:
輸出一行,包括一個(gè)整數(shù),表示zmx能獲得的最大熟練度。示例1
輸入
輸出
6示例2
輸入
輸出
7以時(shí)間間隔作為背包容量,
每段時(shí)間間隔作為消耗,經(jīng)驗(yàn)作為價(jià)值。背包。
L 彪神666
鏈接:https://ac.nowcoder.com/acm/contest/318/L
來源:牛客網(wǎng)
題目描述
在國外,666代表魔鬼,777代表上帝。
所以牛逼的彪神就非常不喜歡6這個(gè)數(shù)字。
有一天彪神突發(fā)奇想,,他想求一些書與6無關(guān)的數(shù)。
如果一個(gè)數(shù)能被6整除,或者它的十進(jìn)制表示法中某位上的數(shù)字為6,則稱其為與6相關(guān)的數(shù)。彪神要求所有小于等于N的與6無關(guān)的正整數(shù)的平方和。
輸入描述:
第一行一個(gè)數(shù)T表示有T組數(shù)據(jù)。(T≤20)后面T行數(shù)每行一個(gè)N,表示求所有小于等于N的與6無關(guān)的正整數(shù)的平方和。(N≤106)輸出描述:
T行,每行一個(gè)數(shù)表示求所有小于等于N的與6無關(guān)的正整數(shù)的平方和。示例1
輸入
輸出
30 55 55 104 168暴力
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll calculate(ll num){if(num%6==0)return 0;ll x=num;while(x){if(x%10==6)return 0;x/=10;}return num*num; } ll ans; int n,t; int main() {cin>>t;while(t--){cin>>n;for(ll i=1;i<=n;++i)ans+=calculate(i);cout<<ans<<endl;ans=0;}return 0; }M 被打臉的瀟灑哥
鏈接:https://ac.nowcoder.com/acm/contest/318/M
來源:牛客網(wǎng)
題目描述
“畫個(gè)圈圈詛咒你!”
在一次青青草原ACM個(gè)人賽中,瀟灑哥被喜洋洋以30s罰時(shí)壓制,委屈的當(dāng)了個(gè)第二。瀟灑哥蹲在角落說出了他的口頭禪,并畫起了圈圈。
突然,他想出了一個(gè)有趣的題目,跑去給喜洋洋做。喜洋洋看到題目后懵逼了,但是看到瀟灑哥臉上欠揍的笑容就不爽,暗想一定要做出來狠狠的打?yàn)t灑哥的臉。
于是,他以上廁所為名義跑出來用手機(jī)把題目發(fā)給了你,希望你能幫你做出來讓他可以嘲諷瀟灑哥。
你收到的題目如下:
平面上有n個(gè)圓,求使這n個(gè)圓兩兩相交(即每?jī)蓚€(gè)圓之間恰好有兩個(gè)交點(diǎn))后最多能把平面劃分成多少個(gè)區(qū)域。
輸入描述:
一個(gè)正整數(shù)t,表示有t(1≤t≤100)組數(shù)據(jù)。 接下來t行,每行一個(gè)整數(shù)n(0≤n≤1000),代表平面內(nèi)圓的個(gè)數(shù)。輸出描述:
輸出共t行。每行一個(gè)正整數(shù),表示對(duì)應(yīng)的n個(gè)圓將該平面劃分成的最大的區(qū)域數(shù)。示例1
輸入
輸出
2 4 8說明
第一個(gè)樣例,平面只有一個(gè)圓,此時(shí)將平面劃分成圓內(nèi)和圓外兩個(gè)區(qū)域; 第二個(gè)樣例,平面上有兩個(gè)圓,兩圓相交可以將平面劃分成四個(gè)區(qū)域(見下圖)。一個(gè)圓最多能把平面分成2個(gè)部分,
2個(gè)圓最多能把平面分成4個(gè)部分;
3個(gè)圓最多能把平面分成8個(gè)部分;
現(xiàn)在加入第4個(gè)圓,為了使分成的部分最多,第4個(gè)圓必須與前面3個(gè)圓都有兩個(gè)交點(diǎn);
因此得6個(gè)交點(diǎn)將第4個(gè)圓的圓周分成6段圓弧,而每一段圓弧將原來的部分一分為二,即增加了一個(gè)部分,于是4個(gè)圓最多將平面分成8+6=14個(gè)部分,
同理,5個(gè)圓最多將平面分成14+8=22個(gè)部分,
一般地,n個(gè)圓最多分平面為:
2+1×2+2×2+…+(n-1)×2,
=2+2[1+2+…+(n-1)],
=n2-n+2;
當(dāng)n=10時(shí),最多可以分成:102-10+2=92(部分),
答:10個(gè)圓最多可以把平面分成92部分.
故答案為:92.
這題注意特判0的情況
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main(){int t;cin>>t;while(t--){ll n;cin>>n;ll sum=n*n-n+2;cout<<sum<<endl;} }總結(jié)
以上是生活随笔為你收集整理的长沙理工大学ACMore编程协会2018年新生赛(重现赛)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 升级到JUnit5的7个理由
- 下一篇: android notification