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; }