码迷,mamicode.com
首页 > 其他好文 > 详细

UVA815

时间:2019-02-22 00:50:09      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:系统   组织   ubi   inpu   first   evel   oca   int   struct   

这道题主要学到的就是数据结构的组织,一些需要从小到大排列的东西,这些东西还有对应的东西。这个时候使用map可以解决

下面贴出代码。其中所使用的思想,估计这个东西是没法学的,这就只能是灵感

//这是什么吉尔题,题意都没有说清楚,排水系统保证从最低的开始,而且四面都是高地
//我想要的数据结构是,从小到大把海拔排序,每个海拔对应=这个海拔的块数,以及比这个海拔低的块数
//最后计算的时候,可以很容易的计算出快要淹没这个海拔时所需要的体积,海拔差*比这个海拔低的块数
#include<cstdio>
#include<map>
using namespace std;
 struct square
 {
     int this_level;
     int lower_level;
     int cubic_meters;
 };

 map<int,square*>Map;

 int row,col;
 int cubic_meter;

 bool initial()
 {
     Map.clear();
     scanf("%d%d",&row,&col);
     if(!row)
     {
         return false;
     }
     for(int i=0;i<row*col;i++)
     {
         int level;
         scanf("%d",&level);
         if(!Map.count(level))
         {
             Map[level]=new square;
             Map[level]->this_level=1;
         }
         else
         {
             Map[level]->this_level++;
         }
     }
     scanf("%d",&cubic_meter);
 }

 void print_map()
 {
     for(map<int,square*>::iterator it=Map.begin();it!=Map.end();it++)
     {
         printf("海拔%d的有  %d块\n",it->first,it->second->this_level);
         printf("海拔比%d低的有  %d块\n",it->first,it->second->lower_level);
         printf("恰好没有淹没这个海拔时的所需水的体积%d\n",it->second->cubic_meters);
         printf("\n");
     }
 }

 void compute()
 {
     if(cubic_meter==0)
     {
         printf("Water level is %.2lf meters.\n",(double)Map.begin()->first);
         printf("0.00 percent of the region is under water.\n");
         return;

     }
     //先将恰好没有埋没每块土地时,所需的水的体积计算出来
     int lower=0;
     for(map<int,square*>::iterator it=Map.begin();it!=Map.end();it++)
     {
         it->second->lower_level=lower;
         lower=lower+it->second->this_level;
     }
     int lower_level=0,lower_cube=0;
     for(map<int,square*>::iterator it=Map.begin();it!=Map.end();it++)
     {
         it->second->cubic_meters=it->second->lower_level*(it->first-lower_level)*100+lower_cube;
         lower_level=it->first;
         lower_cube=it->second->cubic_meters;
     }
     double water_level,percent;
     map<int,square*>::iterator it=Map.begin();
     for(;it!=Map.end();it++)
     {
         if(it->second->cubic_meters>=cubic_meter)
         {
             percent=(double)it->second->lower_level/(row*col);
             water_level=it->first-(it->second->cubic_meters-(double)cubic_meter)/(it->second->lower_level*100);
             printf("Water level is %.2lf meters.\n",water_level);
             printf("%.2lf percent of the region is under water.\n",percent*100);
             return;
         }
     }
     it--;
     water_level=((double)cubic_meter-it->second->cubic_meters)/(row*col*100)+it->first;
      printf("Water level is %.2lf meters.\n",water_level);
      printf("100.00 percent of the region is under water.\n");

 }

 int main()
 {
#ifdef local
     freopen("input.txt","r",stdin);
     freopen("output.txt","w",stdout);
#endif
     int kase=0;
     while(initial())
     {
         printf("Region %d\n",++kase);
         compute();
         printf("\n");
        // print_map();
         //compute();
     }
     return 0;
 }

 

UVA815

标签:系统   组织   ubi   inpu   first   evel   oca   int   struct   

原文地址:https://www.cnblogs.com/TorettoRui/p/10415983.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!