盛大游戏杯第十五届上海大学程序设计联赛暨上海金马五校赛
編程1小時(shí),提交4小時(shí)
做這種比賽一定要選一個(gè)好OJ啊
黑白圖像直方圖
發(fā)布時(shí)間: 2017年7月8日 21:00?? 最后更新: 2017年7月8日 22:38?? 時(shí)間限制: 1000ms?? 內(nèi)存限制: 128M
描述?
?
在一個(gè)矩形的灰度圖像上,每個(gè)像素點(diǎn)或者是黑色的或者是白色的。黑色像素點(diǎn)用1 表示,白色像素點(diǎn)用0 表示?,F(xiàn)在要求你編寫(xiě)一個(gè)程序,計(jì)算每列上黑色像素點(diǎn)的個(gè)數(shù)并輸出。如下圖所示是一個(gè)6?8 的黑板圖像。?
1 1 0 0 1 1 1 1
0 1 1 0 1 0 1 0
1 1 1 1 0 1 1 0
0 1 1 0 0 1 0 0
1 0 1 0 0 1 0 0
0 1 0 1 0 1 1 0
?
輸入輸入有多組組。
每組的第一行有2 個(gè)整數(shù)m 、n ,(1<=m ,n<=100 )。
接著有m 行,每行有n 個(gè)數(shù)字,每個(gè)數(shù)字是0 或1 ,之間用一個(gè)空格分開(kāi)。
對(duì)圖像數(shù)據(jù),依次一行輸出圖像中每列黑色像素點(diǎn)的總數(shù)。
樣例輸入1 復(fù)制 3 5 1 1 0 0 1 0 1 1 0 1 1 1 1 1 0 6 8 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 0 1 1 1 1 0 1 1 0 0 1 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0 1 0 1 0 1 1 0 樣例輸出1 2 3 2 1 2 3 5 4 2 2 5 4 1 直接統(tǒng)計(jì)每列的和就好 #include <bits/stdc++.h> using namespace std; int a[105]; int main() {ios::sync_with_stdio(false);cin.tie(0);int n,m;while(cin>>n>>m){for(int i=0;i<m;i++)a[i]=0;for(int i=0;i<n;i++)for(int j=0;j<m;j++){int p;cin>>p;a[j]+=p;}cout<<a[0];for(int i=1;i<m;i++){cout<<" "<<a[i];}cout<<endl;}return 0; }神無(wú)月排位賽
發(fā)布時(shí)間: 2017年7月8日 21:06?? 最后更新: 2017年7月8日 22:35?? 時(shí)間限制: 1000ms?? 內(nèi)存限制: 128M
描述《神無(wú)月》作為盛大游戲2017年的全新原創(chuàng)大作,其開(kāi)發(fā)團(tuán)隊(duì)在自研實(shí)力強(qiáng)大的傳世工作室基礎(chǔ)之上,還有美樹(shù)本晴彥等日本一線知名畫(huà)師及日本游戲音樂(lè)大師崎元仁加盟參與制作。目前正在不限號(hào)內(nèi)測(cè)中,有很多玩家進(jìn)入到神無(wú)月的世界中。
在神無(wú)月中,有著玩家之間切磋的排位賽,其段位主要分為五大段位,從低到高依次為:新兵、菁英、戰(zhàn)將、統(tǒng)帥、王者。每個(gè)玩家只有從新兵段位慢慢努力,一點(diǎn)點(diǎn)晉級(jí)才能到達(dá)王者段位。成為一個(gè)王者是每一個(gè)玩家的追求和心愿。
假設(shè)神無(wú)月的段位系統(tǒng)如下:
從低到高的段位依次簡(jiǎn)記為:D、C、B、A、S。玩家打排位賽,每勝利1局增加10分,輸1局扣除5分。每一個(gè)段位都需要積分,累計(jì)100分才可以進(jìn)入晉級(jí)賽,晉級(jí)賽采用三局兩勝制(3局中達(dá)到2局勝利就晉級(jí)成功,有2局失敗就算晉級(jí)失敗, 連勝或連敗兩局,第三局不需要打了)。晉級(jí)成功后,成為下一個(gè)段位,積分變?yōu)?,重新開(kāi)始算分;如果晉級(jí)失敗,則積分變?yōu)?0,重新開(kāi)始算分。為方便計(jì)算,如果該玩家一直輸,積分降為0后,不再降分,也不會(huì)掉段位。
大圣同學(xué)最近對(duì)神無(wú)月非常喜歡,一直在努力成為王者。他從新兵0分開(kāi)始打排位賽(剛開(kāi)始處在段位D),他告訴你最近若干場(chǎng)比賽的最后勝利情況,請(qǐng)你寫(xiě)個(gè)算法猜猜他現(xiàn)在所處的段位。當(dāng)段位到達(dá)S時(shí),段位將不再提高。
輸入有若干組數(shù)據(jù)。
每組的第一行為一個(gè)N (0<N<500 ),表示有N 場(chǎng)比賽數(shù)據(jù)。
第二行有N 個(gè)數(shù)字,每個(gè)數(shù)字之間有空格隔開(kāi),每個(gè)數(shù)字代表每場(chǎng)比賽的輸贏情況,1 表示贏,0 表示輸。
注意:當(dāng)?shù)?span id="ze8trgl8bvbq" class="MathJax_Preview">n 場(chǎng)比賽結(jié)束時(shí),若大圣同學(xué)正處于晉級(jí)賽,并且還無(wú)法決定晉級(jí)成功或失敗,那么可以忽略這場(chǎng)晉級(jí)賽
對(duì)于每組比賽數(shù)據(jù),輸出最后所處的段位的一個(gè)英文字符(D 、C 、B 、A 、S 這五個(gè)段位中的一個(gè))。
樣例輸入1 復(fù)制 15 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 30 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 樣例輸出1 C B 模擬。把排位賽模擬下,晉級(jí)賽模擬下 #include <bits/stdc++.h> using namespace std; int main() {ios::sync_with_stdio(false);cin.tie(0);int t;while(cin>>t){int n=0,f=0,f1=0,f2=0,f3=0;for(int i=0; i<t; i++){int p;cin>>p;if(!f){if(p)n+=10;else if(n>=5)n-=5;if(n>=100)f=1;}else{if(p)f1+=1;else f2+=1;if(f2==2){f=0;n=60;f1=0;f2=0;}else if(f1==2){f=0;n=0;f3++;f1=0;f2=0;}}}if(f3>3)printf("S\n");else if(f3>2)printf("A\n");else if(f3>1)printf("B\n");else if(f3>0)printf("C\n");elseprintf("D\n");}return 0; }I Love ces
發(fā)布時(shí)間: 2017年7月8日 21:08?? 最后更新: 2017年7月8日 22:33?? 時(shí)間限制: 1000ms?? 內(nèi)存限制: 128M
描述時(shí)間過(guò)得好快啊,SHU計(jì)算機(jī)學(xué)院又有新的一批小朋友們進(jìn)來(lái)了。2016級(jí)的同學(xué)想必也是非常喜歡計(jì)算機(jī)學(xué)院的,于是院長(zhǎng)想測(cè)試一下大家對(duì)計(jì)算機(jī)的喜愛(ài)程度(院長(zhǎng)大人別查我水表)。
院長(zhǎng)給大家一行由大寫(xiě)字母(A-Z)和小寫(xiě)字母(a-z)組成的字符串,允許同學(xué)們?cè)谶@個(gè)字符串里面任意挑選若干個(gè)字符,問(wèn)最多可以組成多少個(gè)I LOVE CES(不區(qū)分大小寫(xiě),沒(méi)有空格,即只要有這8個(gè)字符就可以組成一個(gè))。
輸入多組輸入,每組一行,輸入一個(gè)字符串。
字符串長(zhǎng)度<=100000 。
每組輸出一行答案,如題意。
樣例輸入1 復(fù)制 IlovecesiLOVECES 樣例輸出1 2 統(tǒng)計(jì)字符個(gè)數(shù) #include <bits/stdc++.h> using namespace std; char s[100005]; int main() {while(~scanf("%s",s)){int I=0,l=0,o=0,v=0,c=0,e=0,st=0;for(int i=0;s[i];i++)if(s[i]=='i'||s[i]=='I')I++;else if(s[i]=='l'||s[i]=='L')l++;else if(s[i]=='o'||s[i]=='O')o++;else if(s[i]=='v'||s[i]=='V')v++;else if(s[i]=='e'||s[i]=='E')e++;else if(s[i]=='c'||s[i]=='C')c++;else if(s[i]=='s'||s[i]=='S')st++;e/=2;printf("%d\n",min(min(min(I,l),min(o,v)),min(min(c,e),st)));}return 0; }添加好友
發(fā)布時(shí)間: 2017年7月8日 21:10?? 最后更新: 2017年7月8日 22:32?? 時(shí)間限制: 1000ms?? 內(nèi)存限制: 128M
描述Tony最近喜歡上了龍之谷游戲,所以他想叫上他的好友組建一個(gè)公會(huì)來(lái)一起享受這款游戲。
Tony一共有n 個(gè)好友,他可以叫上任意k (1<=k<=n )個(gè)好友來(lái)組建公會(huì),并且所有好友都會(huì)答應(yīng)他的請(qǐng)求。問(wèn)Tony一共可以有多少種方案組建這個(gè)公會(huì)?
只要不是完全相同的人組建的方案視為不同方案,并且Tony至少要叫上一個(gè)人。
輸入多組輸入,每組一行,輸入一個(gè)正整數(shù)n (1<=n<=1000000000 )。
輸出每組輸出一行,輸出方案數(shù)。(對(duì)1000000007 取膜)
樣例輸入1 復(fù)制 2 樣例輸出1 3 就是2^n-1對(duì)1e9+7取模,直接快速冪模板就行 #include <stdio.h> #include <bits/stdc++.h> typedef long long LL; const LL c=1e9+7; using namespace std; LL la(LL a, LL b) {LL ans=1;a%=c;while(b>0){if(b%2==1)ans=(ans*a)%c;b=b/2;a=(a*a)%c;}return ans; } int main() {LL n;while(cin>>n){printf("%lld\n",(la(2,n)-1+c)%c);}return 0; }字符串進(jìn)制轉(zhuǎn)換
發(fā)布時(shí)間: 2017年7月8日 21:13?? 最后更新: 2017年7月8日 22:31?? 時(shí)間限制: 1000ms?? 內(nèi)存限制: 128M
描述Claire Redfield在龍之谷游戲的一次任務(wù)中獲得了一個(gè)上了鎖的寶箱,上面刻了一串由小寫(xiě)字母構(gòu)成的字符串A和一個(gè)數(shù)字m 。
經(jīng)過(guò)Claire長(zhǎng)時(shí)間研究,他發(fā)現(xiàn)密碼是和a ,m 有關(guān)的。字符串A相當(dāng)于一個(gè)26進(jìn)制的數(shù)字,a 相當(dāng)于0 ,b 相當(dāng)于1 …….z 相當(dāng)于25 。然后要將這個(gè)26進(jìn)制的數(shù)轉(zhuǎn)化成m 進(jìn)制那就是這個(gè)寶箱的密碼。
Claire覺(jué)得這個(gè)太簡(jiǎn)單了所以要你幫她完成。
輸入多組輸入,每組一行,輸入一個(gè)字符串A 和一個(gè)正整數(shù)m 。
字符串長(zhǎng)度<=10,2<=m<=9 。
每組輸出一行答案,如題意。
樣例輸入1 復(fù)制 b 2 樣例輸出1 1 簡(jiǎn)單的進(jìn)制轉(zhuǎn)換 #include <bits/stdc++.h> using namespace std; typedef long long LL; char f[100]; int l; void la(LL n, int b) {static char c[16]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};l=0;while(n) {f[l++]=c[n%b];n=n/b;} } int main() {ios::sync_with_stdio(false);cin.tie(0);string s;int m;while(cin>>s>>m){LL t=0;for(int i=0;s[i];i++)t=t*26+s[i]-'a';if(t==0){printf("%d",0);}else{la(t,m);for(int k=l-1; k>=0; k--)printf("%c",f[k]);}puts(""); }return 0; }A序列
發(fā)布時(shí)間: 2017年7月8日 21:16?? 最后更新: 2017年7月8日 22:29?? 時(shí)間限制: 1000ms?? 內(nèi)存限制: 128M
描述如果一個(gè)序列有奇數(shù)個(gè)正整數(shù)組成,不妨令此序列為a1,a2,a3,...,a2?k+1 (0<=k ),并且a1,a2...ak+1 是一個(gè)嚴(yán)格遞增的序列,ak+1,ak+2,...,a2?k+1 ,是一個(gè)嚴(yán)格遞減的序列,則稱(chēng)此序列是A序列。
比如1 2 5 4 3就是一個(gè)A序列。
現(xiàn)在Jazz有一個(gè)長(zhǎng)度為n 的數(shù)組,他希望讓你求出這個(gè)數(shù)組所有滿足A序列定義的子序列里面最大的那個(gè)長(zhǎng)度。(子序列可以不連續(xù))
比如1 2 5 4 3 6 7 8 9,最長(zhǎng)的A序列子串是1 2 5 4 3。
輸入多組輸入,每組兩行。
第一行是n ,表示給的數(shù)組的長(zhǎng)度。
第二行有n 個(gè)數(shù)(int范圍),即給你的數(shù)組。
1<=n<=500000 。
每組輸入輸出一行,即最長(zhǎng)的A序列子串的長(zhǎng)度。
樣例輸入1 復(fù)制 9 1 2 5 4 3 6 7 8 9 樣例輸出1 5 最長(zhǎng)上升子序列,正著來(lái)一次,倒著來(lái)一次,但是復(fù)雜度要nlogn的 最長(zhǎng)上升子序列的思路來(lái)自這里,應(yīng)該沒(méi)毛病,OJ炸了 #include<stdio.h> #include<bits/stdc++.h> using namespace std; const int N=5e5+10; int a[N],f[N],l[N],r[N]; int main() {int n;while(~scanf("%d",&n)){for(int i=1; i<=n; i++)scanf("%d",&a[i]);int c=1;l[1]=1,r[n]=1,f[1]=a[1];for(int i=2; i<=n; i++){if(a[i]>f[c]) {f[++c]=a[i];l[i]=c;}else{int k=lower_bound(f+1,f+c,a[i])-f;l[i]=k;f[k]=a[i];}}c=1,f[1]=a[n];for(int i=n-1; i ; i--){if(a[i]>f[c]) {f[++c]=a[i];r[i]=c;}else{int k=lower_bound(f+1,f+c,a[i])-f;r[i]=k;f[k]=a[i];}}c=0;for(int i=1; i<=n; i++)c=max(c,min(2*l[i]-1,2*r[i]-1));printf("%d\n",c);}return 0; }?巧用c++的stl簡(jiǎn)單實(shí)現(xiàn)最長(zhǎng)上升子序列
fill(g,g+n,infinity); for(int i=0;i<n;i++) {int j=lower_bound(g, g+n,a[i])-g;f[i]=j+1;g[j]=a[i]; }丟史蒂芬妮
發(fā)布時(shí)間: 2017年7月9日 18:17?? 最后更新: 2017年7月9日 21:05?? 時(shí)間限制: 1000ms?? 內(nèi)存限制: 128M
描述有一天,空和白很無(wú)聊,決定玩盛大游戲,考慮到兩個(gè)人玩,他們隨便掏了一個(gè)游戲出來(lái):在一個(gè)n?m的棋盤(pán)上,首先把史蒂芬妮·多拉放在左上角(1,1)的位置。每次一個(gè)人可以將她往下,往右,往右下丟一格。當(dāng)前回合,誰(shuí)不能丟史蒂芬妮,誰(shuí)就輸了。(注意,不可以把活人丟出棋盤(pán)啦!)游戲總是空先手。
白說(shuō),這是一個(gè)垃圾游戲!我們每次把史蒂芬妮丟素?cái)?shù)個(gè)位置吧!(換句話說(shuō),每次丟2或3或5或7或…格)空答應(yīng)了。
我們都知道,空和白都很聰明,不管哪方存在一個(gè)可以必勝的最優(yōu)策略,都會(huì)按照最優(yōu)策略保證勝利。
玩了一局,空已經(jīng)知道了這個(gè)游戲的套路,現(xiàn)在他決定考考你,對(duì)于給定的n和m,空是贏是輸?如果空必勝,輸出“Sora”(無(wú)引號(hào));反之,輸出“Shiro”(無(wú)引號(hào))。
輸入第一行有一個(gè)T表示數(shù)組組數(shù),1<=T<100000
從第二行開(kāi)始,每行為棋盤(pán)大小,n、m分別表示行列。
1=<n<=500,1=<m<=500
對(duì)于每組數(shù)據(jù),按題目要求輸出。
樣例輸入1 4 1 1 2 2 10 10 30 30樣例輸出1
Shiro Shiro Shiro Sora這個(gè)就是個(gè)sg函數(shù)唄,比如我2就是個(gè)必勝啊
然后設(shè)個(gè)三重循環(huán)考慮終點(diǎn)
這位聚聚的預(yù)處理
也可以進(jìn)這位聚聚的博客看其他代碼哦
#include <bits/stdc++.h> using namespace std; #define mst(a,b) memset((a),(b),sizeof(a)) const int maxn= 500; const ll mod = 1e9+7; const int INF = 0x3f3f3f3f; const double eps = 1e-6; int prime[maxn+5]= {0}; int num_prime=0; bool isprime[maxn+5]= {1,1}; int vis[maxn+5][maxn+5]; void init() {for(int i=2; i<maxn+5; i++){if(!isprime[i])prime[num_prime++]=i;for(int j=0; j<num_prime&&i*prime[j]<maxn+5; j++){isprime[i*prime[j]]=1;if(i%prime[j]==0)break;}}mst(vis,0); //1:必勝 2:必?cái)?/span>vis[1][1]=2;for(int i=1; i<=maxn; i++){for(int j=1; j<=maxn; j++){if(vis[i][j]==0){vis[i][j]=2;}if(vis[i][j]==2){for(int k=0; ; k++){if(i+prime[k]>maxn&&j+prime[k]>maxn)break;if(i+prime[k]<=maxn){vis[i+prime[k]][j]=1;}if(j+prime[k]<=maxn){vis[i][j+prime[k]]=1;}if(i+prime[k]<=maxn&&j+prime[k]<=maxn){vis[i+prime[k]][j+prime[k]]=1;}}}}} } int main() {init();int n,m;int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);if(vis[n][m]==1) puts("Sora");else puts("Shiro");}return 0; }
另一位聚聚的記憶化搜索
#include<bits/stdc++.h> using namespace std; int n,m,k,t,qu[maxn]; bool dp[maxn][maxn],vis[maxn][maxn]; bool dfs(int x,int y) {if(vis[x][y])return dp[x][y];vis[x][y]=true;for(int i=1;i<=qu[0];i++){if(x-qu[i]>0)dp[x][y]|=(!dfs(x-qu[i],y));if(y-qu[i]>0)dp[x][y]|=(!dfs(x,y-qu[i]));if(x-qu[i]>0&&y-qu[i]>0)dp[x][y]|=(!dfs(x-qu[i],y-qu[i]));}return dp[x][y]; } bool sushu(int x) {if(x==2)return true;else if(x%2==0)return false;for(int i=3;i*i<=x;i+=2)if(x%i==0)return false;return true; } void init() {int i,j;rep(i,2,maxn-10)if(sushu(i))qu[++qu[0]]=i;rep(i,1,maxn-10)rep(j,1,maxn-10)dfs(i,j); } int main() {int i,j;init();scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);puts(dp[n][m]?"Sora":"Shiro");}return 0; }?
?
轉(zhuǎn)載于:https://www.cnblogs.com/BobHuang/p/7142454.html
總結(jié)
以上是生活随笔為你收集整理的盛大游戏杯第十五届上海大学程序设计联赛暨上海金马五校赛的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: baidumap vue 判断范围_百度
- 下一篇: spring配置主库从库_spring下