这次又错过了比赛,但是想着还没做过,就补了一下。感觉真的比cf的div2简单,特别是前两个题,a+b,,beginner啊
A.a+b
B.a~b
C.贪心
#include<cstdio>
#include<algorithm>
using namespace std;
int a[105];
int n,x;
int main(){
scanf("%d",&n);
int sum = 0;
for(int i = 1;i <= n;i++)
scanf("%d",&a[i]),sum += a[i];
if(sum % 10)
printf("%d\n",sum);
else{
sort(a+1,a+1+n);
for(int i = 1;i <= n;i++){
if(a[i] % 10 != 0)
return 0 * printf("%d\n",sum-a[i]);
}
printf("0\n");
}
return 0;
}
D.二分次数
INT_MAX在climits头文件
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll h[100005];
ll n,a,b;
bool check(ll k){
ll cnt = k*b;
int num = upper_bound(h+1,h+1+n,cnt) - h;
ll sum = 0;
for(int i = num;i <= n;i++)
{
//printf("h[i]=%lld\n",h[i]);
ll tmp = h[i] - cnt;
sum += (tmp+a-b-1) / (a-b);
}
//printf("%lld %lld\n",sum,k);
return sum <= k;
}
int main(){
scanf("%lld%lld%lld",&n,&a,&b);
for(int i = 1;i <= n;i++)
scanf("%lld",&h[i]);
sort(h+1,h+1+n);
ll l = 0,r = INT_MAX,mid;
while(l < r){
mid = (l+r)/2;
if(!check(mid))
l = mid+1;
else
r = mid;
}
printf("%lld\n",r);
return 0;
}
//2 3 2 3 1 2 1 1 5 5 3 5