20200319(ABC)


传送门

A - If at first you don’t succeed… CodeForces - 991A

容斥原理
但小心数据,因为题目中a、b、c、n的大小不一定

#include<bits/stdc++.h>
using namespace std;
int a,b,c,n;
int main(){
	scanf("%d%d%d%d",&a,&b,&c,&n);
	if(c>a||c>b){
		cout<<"-1"<<endl;
		return 0;
	}
	if(a>n||b>n||c>n){
		cout<<"-1"<<endl;
		return 0;
	}
	if(n-a-b+c>=1){
		printf("%d\n",n-a-b+c);
	}
	else{
		cout<<"-1"<<endl;
	}
	return 0;
}

B - Getting an A CodeForces - 991B

这道题跟以前有一道题的做法类似。每次都排一下序,找到最小并更改最小的
把平均值设置为double,判断是否大于等于4.5

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e2+10;
int n,a[maxn],num;
double sum;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sum+=a[i];
	}
	sum=(double)sum/n;
	if(sum>=4.5){
		cout<<"0"<<endl;
		return 0;
	}
	while(1){
		sort(a+1,a+1+n);
		sum=0;num++;a[1]=5;
		for(int i=1;i<=n;i++)
		sum+=a[i];
		if(sum/n>=4.5){
			cout<<num<<endl;
			return 0;
	    }
	}
}

C - Candies CodeForces - 991C

这题题意是非常好理解的Vasya每次吃固定的糖数k,Petya每次吃剩下糖的10%,输出最小的k
第一: 如果模拟的话会超时(第一个代码),所以我们可以用二分O(nlogn)
第二:我们要注意题目中说的Vasya至少吃n的一半,我们得考虑n的奇偶

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,cnt;
ll num;
ll sum;
int main(){
//	printf("%d\n",58/10);
	scanf("%lld",&n);
	for(ll k=1;k<=n;k++){
		ll j=n;cnt=0;sum=0;
	while(j){
		if(j>=k){
		j-=k;
		sum+=k;
//		if(k==2)
//		cout<<j<<endl;			
		}
		else{
			sum+=j;
			j=0;
		}
		num=j/10;
		j-=num;
//		if(k==2)cout<<j<<endl<<endl;
		cnt++;
	}
	if(n%2==0){
		if(sum>=n/2){
			printf("%lld\n",k);
			return 0;
		}
	}
	else{
		if(sum>=(n+1)/2){
			printf("%lld\n",k);
			return 0;
		}
	}	
	}
	return 0;
}

AC代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
bool check(ll x){
	ll j=n,sum=0;
	while(j){
		if(j>=x){
		j-=x;
		sum+=x;			
		}
		else{
			sum+=j;
			j=0;
			break;
		}
		ll num=j/10;
		j-=num;
	}
	if(n%2==0){
		if(sum>=n/2)return true;
		else return false;
	}
	else{
		if(sum>=(n+1)/2)return true;
		else return false;
	}
}
ll binary(ll l,ll r){
	ll mid,ans;
	while(l<=r){
		mid=l+(r-l)/2;
		if(check(mid))ans=mid,r=mid-1;
		else l=mid+1;
	}
	return ans;
}
int main(){
	scanf("%lld",&n);
	printf("%lld\n",binary(1,n));
	return 0;
}
发布了115 篇原创文章 · 获赞 3 · 访问量 1757

猜你喜欢

转载自blog.csdn.net/qq_43721152/article/details/104976820
ABC
今日推荐