P5951 [BOI2003] Barrel 题解

· · 题解

题目大意

有一个大水池,往里面放一些立方体,求放入立方体后的水面高度。

题目思路

将情况进行分类讨论,分为以下几种情况:

分类讨论

  1. 当物体不浮起时,加上其密度即可。

  2. 当物体浮起时,加上其入水体积。

  3. 当有水溢出时,直接结束循环。

知识储备

满分代码

加上了详细的代码注释。

#include<iostream>
using namespace std;

int S,H,V;//S,H,V,n意思如题目
int n;
double a,ruo;//a为棱长,ruo是密度在课本中读音的谐音

int main()
{
    cin>>S>>H>>V;
    cin>>n;
    double h=1.0*V/S;//计算初始情况
    while(n--)
    {
        cin>>a>>ruo;
        double v=a*a*a;//v用来表示物体体积
        if(ruo>1)//沉底
        {
            h+=v/S;
        }
        if(ruo==1)//悬浮
        {
            h+=v/S;
        }
        if(ruo<1)//沉底
        {
            h+=v*ruo/S;
        }
        if(h>=H)//溢水
        {
            cout<<H<<endl;//输出
            break;//结束循环
        }
    }
    printf("%.7lf",h);
    return 0;
}