题意:n个数,已知其中n-1个,求第n个数,不大于n个数的平均值的2/3的最大值。
思路:标准二分,最小的最大、
感想:水题。。标准二分、
代码:
#include<bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f; #define mod 1000000007 int t,n,a[105],all,num; int main() { scanf("%d",&t); while(t--) { scanf("%d",&n); all=0; for(int i=1;i<n;i++) { scanf("%d",&a[i]); all+=a[i]; } int l=0,r=all*2,mid=-1; while(1) { if((l+r)/2==mid) break; mid=(l+r)/2; if(mid>((mid+all)*2/3/n)) r=mid; else l=mid; //cout<<l<<" "<<r<<" "<<mid<<" "<<all<<" "<<((mid+all)*2/3/n)<<endl; } num=1; for(int i=1;i<n;i++) if(l==a[i]) num++; printf("%d ",l); cout<<fixed<<setprecision(2)<<(1.0)/num<<endl; } }