BestCoder55 hdu5432 二分
2015-09-12 22:42
435 查看
枚举高度时要二分,否则超时,当l和r的整数相同就可以终止了。需要特别注意切面可以在某些金字塔上面,因为这WA了好多次。
#include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> #include<string> #include<map> #include<set> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<sstream> #define LL long long #define OJ_DEBUG 0 #define READ_FILE 1 using namespace std; const int NN_MAX = 10010; const int MM_MAX = NN_MAX*NN_MAX; const int INF = 0x3f3f3f3f; /**********************************************************/ double a[NN_MAX],b[NN_MAX]; /**********************************************************/ /**********************************************************/ int main() { if(READ_FILE) freopen("in.txt","r",stdin); int tt,n; scanf("%d",&tt); while(tt--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%lf",&b[i]); for(int i=0;i<n;i++) scanf("%lf",&a[i]); double s1=0; for(int i=0;i<n;i++) s1 += a[i]*a[i]*b[i]; s1/=2.0; double l=0,r=1000.0,mid; while(l<=r) { mid = (l+r)/2; if( (int)l == (int)r ) break; double s2=0; for(int i=0;i<n;i++) if(b[i]>mid) s2 += pow(a[i],2)*pow(b[i]-mid,3)/pow(b[i],2); if(s2 > s1) l=mid; else if(s2 < s1) r=mid; else if(s2 == s1) break; } printf("%d\n",(int)mid); } return 0; }
相关文章推荐
- 快速排序里的学问:从猜数字开始
- 2015 Multi-University Training Contest 6 Solutions
- HDU 1568
- HDU1290
- HDU1568(Fobonacci公式)
- HDU ACM Step 2.2.2 Joseph(约瑟夫环问题)
- HDU 1405
- HDU 1297
- hdu 1205
- hdu 2087
- hdu 1016
- HDU 4898 The Revenge of the Princess’ Knight ( 2014 Multi-University Training Contest 4 )
- Search Insert Position,Search for a Range,Pow(x, n),Sqrt(x)
- Find Minimum in Rotated Sorted Array II
- HDU 5240 Exam (好水的题)
- HDU5237 Base64 大模拟
- HDU 1000
- HDU 1001
- hdu-5385
- 屌丝的常用排序-----three