HRBU_20211006训练
A - Nearest Interesting Number
B - Equalize Prices
C - Computer Game
D - Candy Box (easy version)
HRBU_20211006训练
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;
}
}
总结
灯火忽暗,蓦然回首之间;却已看不清,出现的画面;前事休说不还,如今都变成过眼云烟。