Codeforces Round #485 (Div. 2)

A.Infinity Gauntlet

六颗无限宝石,颜色和宝石属性用map维护然后标记查询即可,水题。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ins insert
map<string,string> inf;
map<string,bool> rec;
int main()
{
    inf["green"]="Time";
    inf["purple"]="Power";
    inf["orange"]="Soul";
    inf["red"]="Reality";
    inf["yellow"]="Mind";
    inf["blue"]="Space";

    rec["green"]=0;
    rec["purple"]=0;
    rec["orange"]=0;
    rec["red"]=0;
    rec["yellow"]=0;
    rec["blue"]=0;

    int n;
    cin>>n;
    cout<<6-n<<endl;
    while(n--)
    {
        string h;
        cin>>h;
        rec[h]=1;
    }
    for(auto p=rec.begin();p!=rec.end();p++)
    {
        if(p->second!=true)
        {
            cout<<inf[p->first]<<endl;
        }
    }
    return 0;
}

B.High School: Become Human

这一题是给定两个正整数 x x y,判断 xy x y yx y x 的大小关系。
记得在高中做过一个数学归纳法的题目就是推导当 y>x>2 y > x > 2 x x y均为整数,就有 xy>yx x y > y x 恒成立。那么这一题反过来用这个结论就可以知道, x=y x = y 时,两者相等,当 min(x,y)>2 m i n ( x , y ) > 2 时,必然满足 xy>yx x y > y x 。最后,当min(x,y)=2 && max(x,y)=4 min(x,y)=2 && max(x,y)=4 时,有 xy=yx x y = y x ,而当min(x,y)=2 && max(x,y)=3 min(x,y)=2 && max(x,y)=3 min(x,y)=1 m i n ( x , y ) = 1 时,有 xy<yx x y < y x

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    if(a==b||(a==2&&b==4)||(a==4&&b==2)) cout<<"=";
    else if((a==2&&b==3)) cout<<"<";
    else if((a==3&&b==2)) cout<<">";
    else if(a==1||b==1)
    {
        if(a==1) cout<<"<";
        else cout<<">";
    }
    else
    {
        if(a<b) cout<<">";
        else cout<<"<";
    }
    return 0;
}

C.Three Displays

题意,依次给出Display的字体大小与价格,找出三个字体大小的递增序列,然后输出这个序列cost总和的最小值,若不存在这个序列就输出-1。数量n的范围: 0<n<=3000 0 < n <= 3000

分析:
既然 n n 是小于等于3000,那么可以考虑n2算法。首先可以暴力枚举前两个广告牌,然后:若这两个广告牌的大小满足递增条件,则通过枚举第二个广告牌后面的广告牌也能在同样的 n2 n 2 时间内求出第三个满足递增且最便宜的广告牌(当然这里我们可以预处理出前 n1 n − 1 个广告牌的后面的满足递增的最小cost的index记录数组)。这样 n2 n 2 的时间内的枚举就能求解。时间复杂度: O(n2) O ( n 2 )

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int font[3002];
    int cost[3002];
    int af[3002];
    for(int i=0;i<n;i++)
    {
        cin>>font[i];
    }
    for(int i=0;i<n;i++)
    {
        cin>>cost[i];
    }
    for(int i=0;i<n-1;i++)
    {
        int lw=100000001;
        int idx=-1;
        for(int j=i+1;j<n;j++)
        {
            if(font[j]>font[i]&&cost[j]<lw)
            {
                idx=j;
                lw=cost[j];
            }
        }
        af[i]=idx;
    }

    int mincost=2000000000;
    for(int i=0;i<n-2;i++)
    {
        for(int j=i+1;j<n-1;j++)
        {
            if(font[i]<font[j])
            {
                int sum=cost[i]+cost[j];
                if(af[j]!=-1)
                {
                    sum+=cost[af[j]];
                    if(sum<mincost) mincost=sum;
                }
            }
        }
    }
    if(mincost!=2000000000)
    cout<<mincost;
    else cout<<-1;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值