A. Nearest Interesting Number
就是要求离所给的数最近的所有位数的和能被4整除的数,那么直接从所给的数开始,然后一个一个求就可以了,复杂度不高,不会T;
# include <bits/stdc++.h>
using namespace std;
int main()
{
int a;
scanf("%d",&a);
for(int i=a;;i++){
int aa=i;
int b=0;
while(aa){
int c=aa%10;
b+=c;
aa=aa/10;
}
if(b%4==0){
printf("%d",i);
break;
}
}
return 0;
}
B. Equalize Prices
求出最大的一个数,而且要使得每一个数和这个数的差都在给定的范围内,那么就可以用这个范围的值,求出每一个数能够接受的范围,然后交起来就可以了,如果交起来为空的话,那么说明没有这样的数存在
# include <bits/stdc++.h>
using namespace std;
int a[110];
int main()
{
int Q;
scanf("%d",&Q);
while(Q--){
int n,k;
scanf("%d %d",&n,&k);
int l[110],r[110];
int ml,mr;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
l[i]=a[i]-k;
if(i==1){
ml=l[1];
}else{
ml=max(ml,l[i]);
}
r[i]=a[i]+k;
if(i==1){
mr=r[1];
}else{
mr=min(mr,r[i]);
}
}
if(mr>=ml){
printf("%d\n",mr);
}else{
printf("-1\n");
}
}
return 0;
}
C. Computer Game
要求使用两种方式完成每一轮的游戏,然后要求最后剩下的电量大于0,并且要求第一种方式的次数要最大。那么就相当于一个不等式(ax+by)<k && x+y=n 可得 x<( k- bn) / (a-b)对于每一次求出来的x向下取整,然后在和轮数比较就可以
或者是 x<=(k-1-bn)/(a-b)直接整除然后和轮数比较
# include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
int T;
scanf("%d",&T);
while(T--){
LL k,n,a,b;
scanf("%lld %lld %lld %lld",&k,&n,&a,&b);
double cnt=0.0;
cnt=((k-b*n)*1.0)/((a-b)*1.0);
//printf("@@@@ %lf\n",cnt);
if(cnt<=0.0){
//printf("@@@ ");
printf("-1\n");
}else{
LL ccnt;
cnt=cnt-1;
ccnt=min((long long)ceil(cnt),n);
//printf("%d\n",(int)ceil(cnt));
//printf("@@@ ");
printf("%lld\n",ccnt);
}
}
return 0;
}
# include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
int T;
scanf("%d",&T);
while(T--){
LL k,n,a,b;
scanf("%lld %lld %lld %lld",&k,&n,&a,&b);
if(k<=b*n){
printf("-1\n");
}else{
LL sum=0;
sum=(k-1-b*n)/(a-b);
printf("%lld\n",min(sum,n));
}
}
return 0;
}
D. Candy Box (easy version)
要求加入的糖果的每一种的个数都不相同,那么就是先把每一种的糖果的个数都记录下来,然后排序,分两种情况讨论,如果后一个比前一个选择的大或者相等,那么再次加上的是比前一个小1的数,如果后一个比前一个选择的小,那么再次奸商的就是该数,如果当前的数已经小于等于0,那么就可以结束。
# include <bits/stdc++.h>
using namespace std;
const int MAXN=2e5+10;
int a[MAXN];
int cmp(int a,int b)
{
return a>b;
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
int b;
scanf("%d",&b);
//printf("@%d %d\n",b,a[b]);
a[b]++;
}
sort(a+1,a+n+1,cmp);
int sum=0;
int aa=a[1];
sum+=a[1];
//printf("%d ",a[1]);
//printf("%d ",aa);
for(int i=2;i<=n;i++){
//printf("%d ",a[i]);
if(a[i]>=aa){
aa=aa-1;
if(aa>0) sum+=aa;
else break;
}else{
aa=a[i];
sum+=aa;
}
//printf("%d ",aa);
}
//int sum=0;
printf("%d\n",sum);
for(int i=1;i<=n;i++) a[i]=0;
}
return 0;
}