2021.01.30 Rating赛 解题/补题报告

A

一共n个人,去a餐厅的有a人,去b餐厅有b人,两个都去的有c人,求没有去的有多少,如果数据不合理或没去的人数少于1,输出-1

#include<bits/stdc++.h>
using namespace std;
#define ll long long

int main()
{
    int n,a,b,c;
    cin>>a>>b>>c>>n;
    int d=n-a-b+c;
    if(d<=0||c>a||c>b){
        cout<<-1<<endl;
    }else
    cout<<n-a-b+c<<endl;
    return 0;
}

B

给出n个数,可以让其中任意个变成5,求最少变几个使平均数>4.5

思路:排序,每次将最小的变成5(在sum上加上5-ai),直到平均数>4.5

#include<bits/stdc++.h>
using namespace std;
#define ll long long

int main()
{

    int n,i,a[150];
    double sum=0;
    cin>>n;
    for(i=0;i<n;i++){
        cin>>a[i];
        sum+=a[i];
    }
    if(sum/n>=4.5){
        cout<<0<<endl;
    }else{
       sort(a,a+n);
       int i=0;
       while(sum/n<4.5){
        sum+=5-a[i];
        i++;
       }
       cout<<i<<endl;
    }
    return 0;
}

C

有N个糖果,Vasya每天吃k个,Petya每天吃%10,Vasya至少吃一半,求k至少为多少

思路:(刚开始想打表来着,发现我打不出来QWQ)二分判断,(没做出来因为中间变量忘了换longlong了QAQ)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int pd(ll n,ll k)
{
    ll a,b;
    a=0,b=0;
    while(n)
    {
        a+=min(n,k);
        n-=min(n,k);

        b+=n/10;
        n-=n/10;
    }
    if(a>=b){
        return 1;
    }else{
        return -1;
    }
}
int main()
{
    ll n,k=0,n2=0,z,y;
    cin>>n;
    z=1,y=n;
    while(z<=y){
        k=(z+y)/2;
        if(pd(n,k)==1){
          n2=k;
          y=k-1;
        }else{
          z=k+1;
        }
    }
    cout<<n2<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/a-specter/p/14386879.html