uva 815之理解诡异的海平线题目之不容易
生活随笔
收集整理的這篇文章主要介紹了
uva 815之理解诡异的海平线题目之不容易
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先題意:(這個真的令人無奈,題目都看不太明白)
網上百度了一下,就是以下意思:
給你n*m個格子,每個格子的面積是10*10米,整個區域外看作無限高的墻壁。輸入每個格子的海拔高度(可能為負數),以及區域內的雨水總體積,輸出區域水位的海拔高度以及淹沒方格的占比。
注明一下:星星假裝為水,題目給出了每個格子的海平面的高度。
最最最需要知道的是,裝水是兩個海平面之間的那個區域可以放水,而不是我畫的那個方格,存水的是方格外面的區域。
海平線高度是什么意思——每個方格的海拔相當于這個方格的固體體積,可以把它們都看作木塊,雨水只存在兩個木塊間高度差的空間內。
用兩個栗子來解釋一下!!!
1 case 1: 2 3 1 3 10 20 30 4 3000 5 解答: 6 首先我們看一下3000是否會將所有格子的空間都填埋了? 填埋最少所需的水量:((30-10)+(30-20))*10*10=3000 7 我們可以看到完全可以 8 所有答案是 h=30 百分比是1圖示:
30
20 20
10 10 10
0 0 0 case 2: 3 1 -10 -20 -30 3000 解答: 首先我們看一下3000是否會將所有格子的空間都填埋了? 填埋最少所需的水量:((30-10)+(30-20))*10*10=3000 我們可以看到完全可以 所有答案是 h=-10 百分比是1 圖示: 0 -10 -20 -20 -30 -30 -30 1 3 1 2 10 20 30 3 2000 4 Region 1 5 Water level is 25.00 meters. 6 66.67 percent of the region is under water. 1 3 1 2 -10 -20 -30 3 2000 4 Region 6 5 Water level is -15.00 meters. 6 66.67 percent of the region is under water.
通過上面的這些栗子,大概能明白本題的題意了吧!!!
?現在就是解決問題的代碼:
#include<iostream> #include<algorithm> using namespace std; int main() {int n,m;double count;int t=0;while(cin>>n>>m){if(t!=0)cout<<endl;if(n==0&&m==0)break;t++;double a[1000];double sum=0;double lever=0;double len=0; // double sum1=0;for(int i=0;i<n*m;i++){cin>>a[i];}sort(a,a+n*m);for(int i=0;i<n*m-1;i++)sum+=(a[i+1]-a[i])*(i+1); // cout<<"sum: "<<sum<<endl; cin>>count;count/=100;if(sum<=count){lever=100;len=a[n*m-1]-a[0]; count=count-sum;len+=count/(n*m);}else{ // lever=count*100/(sum*1.00);for(int i=0;i<n*m-1;i++){if((a[i+1]-a[i])*(i+1)>=count){len+=count/(i+1);lever++;break;}else{len+=(a[i+1]-a[i]);count-=(a[i+1]-a[i])*(i+1);lever++;}}lever=lever/(n*m)*100;}len=len+a[0];cout<<"Region "<<t<<endl;cout<<"Water level is ";printf("%.2lf",len);cout<<" meters."<<endl;printf("%.2lf",lever);cout<<" percent of the region is under water."<<endl;} } View Code?
轉載于:https://www.cnblogs.com/Aiahtwo/p/10587874.html
總結
以上是生活随笔為你收集整理的uva 815之理解诡异的海平线题目之不容易的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你所认识的String
- 下一篇: 初始匿名函数