华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2217|回复: 3
打印 上一主题 下一主题

UVA815 Flooded!

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
楼主
发表于 2018-5-1 15:05:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
https://www.luogu.org/problemnew/show/UVA815
有一个 n × m (1≤ m , n <30)的网格,每个格子是边长10米的正方形,网格四周是无限大的墙壁。输入每个格子的海拔高度,以及网格内雨水的总体积,输出水位的海拔高度以及有多少百分比的区间有水(即高度严格小于水平面)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
地板
 楼主| 发表于 2018-9-2 18:00:44 | 只看该作者
楼上两位还牛!
回复 支持 反对

使用道具 举报

9

主题

158

帖子

470

积分

华一学生

积分
470
QQ
板凳
发表于 2018-9-2 12:49:59 | 只看该作者
  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstdio>
  4. using namespace std;
  5. int m,n,V,t=1;
  6. double a[1000],v,l,r,mid,cnt,ans;
  7. double const eps=1e-3;
  8. int main()
  9. {
  10.     cin>>m>>n;
  11.     while(m&&n)
  12.     {
  13.         l=r=999999.0;
  14.         for(int i=1;i<=m*n;i++)cin>>a[i],l=min(l,a[i]);
  15.         cin>>V;
  16.         v=V/100.0;
  17.         sort(a+1,a+m*n+1);
  18.         while(r-l>eps)
  19.         {
  20.             mid=(l+r)/2.0;
  21.             cnt=0.0;
  22.             for(int i=1;i<=m*n&&mid-a[i]>eps;i++)cnt+=mid-a[i];
  23.             if(cnt-v>=eps)r=mid-eps,ans=mid;
  24.             else l=mid+eps;
  25.         }
  26.         int k=1;
  27.         while(k<m*n&&a[k]-ans<eps)k++;
  28.         k--;
  29.         printf("Region %d\n",t++);
  30.         printf("Water level is %.2f meters.\n",ans);
  31.         printf("%.2f percent of the region is under water.\n",100*k/(1.0*m*n));
  32.         cin>>m>>n;
  33.     }
  34.     return 0;
  35. }
复制代码
回复 支持 反对

使用道具 举报

2

主题

105

帖子

306

积分

中级会员

Rank: 3Rank: 3

积分
306
沙发
发表于 2018-9-1 15:21:29 | 只看该作者
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <map>
  6. #include <string>
  7. #include <vector>
  8. #include <queue>
  9. #include <stack>
  10. #include <cstdio>
  11. #include <cstdlib>
  12. using namespace std;
  13. int n,m,cnt=0;
  14. long long all,a[1000];
  15. double ans;
  16. int main()
  17. {
  18.     scanf("%d%d",&n,&m);
  19.     while(n!=0&&m!=0)
  20.     {
  21.             memset(a,0,sizeof(a));
  22.             for(int i=1;i<=n;i++)
  23.                     for(int j=1;j<=m;j++)
  24.                             scanf("%lld",&a[i*m+j-m]);               
  25.             sort(a+1,a+1+n*m);
  26.             a[n*m+1]=0x3f3f3f;
  27.             scanf("%lld",&all);
  28.             for(int i=1;i<=n*m;i++)
  29.             {
  30.                     if(all>(a[i+1]-a[i])*100*i)
  31.                             all-=((a[i+1]-a[i])*100*i);
  32.                     else
  33.                     {
  34.                             ans=a[i];
  35.                             ans+=((double)all/(double)(100*i));
  36.                             printf("Region %d\n",++cnt);
  37.                         printf("Water level is %.2lf meters.\n",ans);
  38.                         printf("%.2lf percent of the region is under water.\n\n",(double)i*100.0/(m*n));
  39.                         break;
  40.                         }
  41.                 }
  42.             scanf("%d%d",&n,&m);
  43.         }
  44.     return 0;
  45. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-25 14:13 , Processed in 2.903556 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表