牛客小白月赛17 F小黄鸭(计算几何+积分+二分)

题目链接:https://ac.nowcoder.com/acm/contest/1085/F

题解:

根据\rho Vg=mg\rho =1,可得V=m

球的正视图是个圆心为(0,r),半径为r的圆,方程为x^{2}+(y-r)^{2}=r^2

侵入水中的体积:

体积公式是底面积×高,我们把圆形作为底面积,那么底面积为\pi r^2,

r^2x^2,可通过②式移项得x^{2}=r^2-(y-r)^{2}

那么侵入水中的体积为V=\int _{0}^{z}\left ( r^2-(y-r)^{2} \right )\pi dy,z是侵入水中的深度,上界的z=2r-h,  h即是我们要求的答案。

积下来答案为V=rz^{2}-\frac{1}{3}z^{3},我们对z进行二分,然后2r-z即为所求。

代码:

# define _CRT_SECURE_NO_WARNINGS
#pragma GCC optimize(2)
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define int long long
#define fir first
#define sec second
#define IOS ios_base::sync_with_stdio(0);cin.tie(0)
using namespace std;
/*---------------------------------------------------------------------------------------------------------------------------*/
const int N = 5000 + 5;
const double pi = acos(-1.0);
typedef long long ll;
const int mod = 998244353;
//const int mod = 1e9 + 7;
#define inf 0x3f3f3f3f
struct something {
  int num, period, time;
  bool operator < (const something& y)const {
    return y.time < time || (y.time == time && y.num < num);
  }
  something() {}
  something(int num, int period, int time) :num(num), period(period), time(time) {}
};

int dx[8] = { 0, 0, 1,-1, 1, 1,-1,-1 };
int dy[8] = { 1,-1, 0, 0, 1,-1, 1,-1 };


double r, v;
bool f(double z) {
  return pi * (-1.0 / 3.0 * z * z * z + r * z * z) >= v;
}
signed main() {
  IOS;
#ifdef ONLINE_JUDGE
#else
  freopen("Data.txt", "r", stdin);
#endif
  cin >> r >> v;
  double L = 0, R = 2 * r;
  for (int i = 0; i < 1000; i++) {
    /* z=2*r-h */
    double z = (L + R) / 2.0;
    if (f(z))R = z;
    else L = z;
  }
  printf("%.2lf\n", 2 * r - L);
  return 0;
}

题目描述:

小sun的寝室有一只小黄鸭,小黄鸭浮在水面上的样子特别可爱,现在小sun有一个问题:

为了简单,我们把小黄鸭视为一个均匀的球体,它浮在水面上的样子大概为:

牛客小白月赛17 F小黄鸭(计算几何+积分+二分)_第1张图片

图中黑色的线即为水平线,灰色的部分为没在水中的部分,现在你要求的是,这个球体浮在水面上的部分的高度(即为图中的h)。

高度定义为:一端在圆上,一端在水平线上且过圆心切垂直于水平线的线段长。

浮力定律:物体在液体中所获得的浮力,等于物体所排出液体的重量。(水的密度为1)

 

输入描述:

第一行两个整数:R,m

代表球体的半径与质量

输出描述:

一行实数,代表浮在水面上的高度值,请保留两位小数。

你可能感兴趣的:(牛客,0x72圆/球/圆锥)