比賽地址:http://qscoj.cn/contest/33/c++
A題 國家德比數組
分析:用b,d,B,D記錄兩場比賽兩支球隊的比分,先判斷b+B與d+D的大小,若是先者大則拜仁勝,後者大則多特勝;相同再判斷B與d的大小,前者大拜仁勝,後者大多特勝,相同則加時。spa
標程:code
#include<bits/stdc++.h> using namespace std; int main() { int b,d,B,D; cin>>b>>d; cin>>B>>D; if (b+B>d+D) cout<<"FC Bayern Munich"<<endl; if (b+B<d+D) cout<<"Borussia Dortmund"<<endl; if (b+B==d+D) { if (B>d) cout<<"FC Bayern Munich"<<endl; if (B<d) cout<<"Borussia Dortmund"<<endl; if (B==d) cout<<"Overtime"<<endl; } return 0; }
B題 圓圈統計blog
分析:一共27個韓文字,只需一個個數出每一個韓文字圓圈數量存在一個數組a中,將三十六進制數轉化爲十進制,再從a[l]累加到a[r]就行。遊戲
標程:ci
#include<bits/stdc++.h> using namespace std; int a[28]={0,1,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,2,1,1,1,0,0,1,1,1,1}; int main() { string s1,s2; int l,r,i,ans; cin>>s1>>s2;ans=0; if (s1[0]<=57) l=s1[0]-48; else l=s1[0]-55; if (s2[0]<=57) r=s2[0]-48; else r=s2[0]-55; for(i=l;i<=r;i++) ans+=a[i]; cout<<ans<<endl; return 0; }
C題 飛鏢遊戲string
分析:經過題意能夠分析出,最後一鏢能投的分數爲2-40的偶數和50,以前的每鏢能投的分數爲1-20,2-40的偶數,3-60中3的倍數,25,50。因此把這些能投中的分數放在一個vector數組中,倒回去DP。先把全部dp值賦爲-1,把2-40和50的dp值賦爲1;以後再依次更新下一步能投中的分數總和,dp[i]=min(dp[i-v[j]])+1;v[j]爲1鏢能投中的分數。注意x爲1時不管如何都沒法達到該分數,則應輸出-1.it
標程:class
#include<bits/stdc++.h> using namespace std; int dp[510]; vector<int> v; int main() { int x,i,j,k,minx; bool flag; cin>>x; memset(dp,-1,sizeof(dp)); for(i=1;i<=20;i++) { v.push_back(i); v.push_back(2*i); v.push_back(3*i); } v.push_back(25); v.push_back(50); for(i=1;i<=20;i++) dp[2*i]=1; dp[50]=-1;flag=true; while(flag) { flag=false; for(i=2;i<=501;i++) { if (dp[i]!=-1) continue; flag=true;minx=0x3f3f3f3f; for(j=0;j<v.size();j++) { k=i-v[j]; if (k>=2 && dp[k]!=-1) minx=min(minx,dp[k]); } dp[i]=minx+1; } } cout<<dp[x]<<endl; return 0; }