电子科技大学实验中学PK赛(三)-期末测试比赛题解

比赛地址:http://qscoj.cn/contest/33/

A题 国家德比

分析:用b,d,B,D记录两场比赛两支球队的比分,先判断b+B与d+D的大小,如果先者大则拜仁胜,后者大则多特胜;相同再判断B与d的大小,前者大拜仁胜,后者大多特胜,相同则加时。

标程:

#include
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"Borussia Dortmund"<<endl;
    if (b+B==d+D)
    {
        if (B>d) cout<<"FC Bayern Munich"<<endl;
        if (B"Borussia Dortmund"<<endl;
        if (B==d) cout<<"Overtime"<<endl;
    }
    return 0;
}

B题 圆圈统计

分析:一共27个韩文字,只需一个个数出每个韩文字圆圈数量存在一个数组a中,将三十六进制数转化为十进制,再从a[l]累加到a[r]就行。

标程:

#include
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<endl;
    return 0;
}

C题 飞镖游戏

分析:通过题意可以分析出,最后一镖能投的分数为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.

标程:

#include
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)
            {
                k=i-v[j];
                if (k>=2 && dp[k]!=-1) minx=min(minx,dp[k]);
            }
            dp[i]=minx+1;
        }
    }
    cout<endl;
    return 0;
}

 

转载于:https://www.cnblogs.com/cs-lyj1997/p/6919234.html

你可能感兴趣的:(电子科技大学实验中学PK赛(三)-期末测试比赛题解)