HRBU_20211006训练

HRBU_20211006训练

A - Nearest Interesting Number
B - Equalize Prices
C - Computer Game
D - Candy Box (easy version)

A - Nearest Interesting Number

题意

输入一个数字求离它最近的可以被四整除的数,从该数开始遍历找出能每个数字之和可以被四整除就break;

代码

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int n,ans;
    cin>>n;
    int a,b,c,d;

    while(true)
    {
    a=n/1000;
    b=n/100%10;
    c=n/10%10;
    d=n%10;
    ans=a+b+c+d;
    if(ans%4==0)
        break;
    else
        n++;
    }
    cout<<n<<endl;
}

B - Equalize Prices

题意

输入一系列数字,在输入一个数k,把数字上调或下调至同一个数,绝对值不超过k;

思路
排序,最大的数减去最小的数小于等于两倍的k,如果是输出最小值加k,否则输出-1;

代码

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,k,a[105];
        cin>>n;cin>>k;
        for(int i=0;i<n;i++)
            cin>>a[i];
        sort(a,a+n);
        if(a[n-1]-a[0]<=2*k)
            cout<<a[0]+k<<endl;
        else
            cout<<"-1"<<endl;
    }
}

C - Computer Game

题意

判断电脑是否足以玩一个用量为a的游戏,最多可以玩几次,可否达到输入的轮次,如果不能输出-1,否则输出可以玩a 的最大次数,也可以退而求其次玩电量为b的游戏,但是最后输出不能加进去,只能算a 的

代码

#include<stdio.h>
#include<iostream>
#define ll long long
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        ll k,n,a,b,cnt,cnt1;
        cin>>k;cin>>n;cin>>a;cin>>b;
        if(k-n*b<=0)
          cout<<"-1"<<endl;
        else
        {
           cnt1=(k-n*b)/(a-b);
           if((k-n*b)%(a-b)==0)
                cnt1--;
            cout<<min(cnt1,n)<<endl;


        }
    }
}

D - Candy Box (easy version)

题意

简单来说就是求出相同的数字有几个,若相同数字的个数与其他数字相同只能算一个,求一个有多少不同的数字,用贪心算法求解

代码

#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        vector<int>cnt(n+1);
        for(int i=1;i<=n;i++)
        {
            int x;
            cin>>x;
            cnt[x]++;
        }
        sort(cnt.rbegin(),cnt.rend());
        /*for(int i=0;i<n;i++)
          cout<<cnt[i]<<" ";
        cout<<endl;*/
        int ans=cnt[0],la=cnt[0];
        for(int i=1;i<cnt.size();i++)
        {
            if(la==0)break;
            if(cnt[i]>=la)
            {
                ans+=la-1;
                la--;
            }
            else
            {
                ans+=cnt[i];
                la=cnt[i];
            }
        }
       // cout<<cnt.size()<<endl;
        cout<<ans<<endl;


    }
}

总结

灯火忽暗,蓦然回首之间;却已看不清,出现的画面;前事休说不还,如今都变成过眼云烟。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值