UVA815
Posted torettorui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA815相关的知识,希望对你有一定的参考价值。
这道题主要学到的就是数据结构的组织,一些需要从小到大排列的东西,这些东西还有对应的东西。这个时候使用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块 ",it->first,it->second->this_level); printf("海拔比%d低的有 %d块 ",it->first,it->second->lower_level); printf("恰好没有淹没这个海拔时的所需水的体积%d ",it->second->cubic_meters); printf(" "); } } void compute() { if(cubic_meter==0) { printf("Water level is %.2lf meters. ",(double)Map.begin()->first); printf("0.00 percent of the region is under water. "); 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. ",water_level); printf("%.2lf percent of the region is under water. ",percent*100); return; } } it--; water_level=((double)cubic_meter-it->second->cubic_meters)/(row*col*100)+it->first; printf("Water level is %.2lf meters. ",water_level); printf("100.00 percent of the region is under water. "); } int main() { #ifdef local freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif int kase=0; while(initial()) { printf("Region %d ",++kase); compute(); printf(" "); // print_map(); //compute(); } return 0; }
以上是关于UVA815的主要内容,如果未能解决你的问题,请参考以下文章