習題4-10 洪水 UVa815__NOIP

來源:互聯網
上載者:User
演算法競賽入門經典(第2版)第4章 函數和遞迴

習題4-10洪水  UVa815

感悟。

1、從網站下載英文原題,重點在看輸入輸出資料與格式。

2、反覆中英文對照,愣是沒看懂範例中的Water level is 46.67 meters.

3、題意沒理解,編程就沒法開始。

4、搜尋還是搜尋http://blog.csdn.net/code4101/article/details/38540759,看到這副圖,馬上明白,本題很快就能弄懂,歸根結底,還是英文水平次了點。不過呢,沒有下圖,反覆讀英文,還是不能讀懂的。


5、開始編碼。有個疑問,水平面剛好與該地區齊平,算不算淹沒。不算,題中提到under water。

6、多次提交WA,對邊界進行多次修改,無水,水將整個網格淹沒,但還是WA。

7、從http://blog.csdn.net/code4101/article/details/38540759拷貝代碼,進行對拍,才發現,是輸出格式問題,此題與以往不同,以往是例子間有空行,本題是每個例子後有空行,Follow
the output for each region with a blank line.修改,提交AC。

8、本題對水量為0應該沒有處理,本人已進行了測試。看看時間2016-11-13 21:50

9、本題容易卡殼有兩個地方,一是水是部分淹沒還是全部淹沒網格,否則WA,二是每個例子後要跟一個空行,否則WA。第二點,不通過對拍,是查不出來的。

10、很高興,第四章結束,也就是本題為什麼本人做得比較急的原因,到第五章真好,等了很久了。

附上AC代碼,編譯環境Dev-C++4.9.9.2

#include <stdio.h>

const int maxn=40;
int elevation[maxn*maxn];
int cubic[maxn*maxn];
int main(){
    int row,col;
    int i,j;
    int water;
    float level;
    int count;
    int tmp;
    int elevationsum;
    int kase;
    float percent;
    kase=0;
    while(scanf("%d%d",&row,&col)&&row&&col){
        count=0;
        for(i=0;i<row;i++){
            for(j=0;j<col;j++){
                scanf("%d",&elevation[count]);//地區海拔
                count++;
            }
        }
        scanf("%d",&water);//水量
        
        for(i=0;i<count;i++){//冒泡排序,地區海拔高度自小到大
            for(j=i+1;j<count;j++){
                if(elevation[i]>elevation[j]){
                    tmp=elevation[i];
                    elevation[i]=elevation[j];
                    elevation[j]=tmp;
                }
            }
        }
        
        //淹沒某個地區的總水量
        for(i=0;i<count-1;i++){
            cubic[i]=10*10*((elevation[i+1]-elevation[i])*(i+1));
        }
        cubic[i]=0;        
        
        for(i=1;i<count;i++){
            cubic[i]+=cubic[i-1];
        }
        
         //找出水淹沒的地區
        for(i=0;i<count;i++){
            if(water<=cubic[i]){
                break;
            }
        }
        
        if(i==count){//水將網格淹沒
            elevationsum=0;
            for(j=0;j<count;j++){
                elevationsum+=elevation[j];
            }
            level=(water*1.0/100+elevationsum)/count;
            percent=100.00;
        }else{//水未將網格淹沒
            elevationsum=0;
            for(j=0;j<=i;j++){
                elevationsum+=elevation[j];
            }
            level=(water*1.0/100+elevationsum)/(i+1);
            percent=(i+1)*1.0/count*100;
        }
        
//        if(kase>0)//若加上此兩行,立馬WA 2016-11-13 21:48
//            printf("\n");
        kase++;
        
        printf("Region %d\n",kase);
        printf("Water level is %.2f meters.\n",level);
        printf("%.2f percent of the region is under water.\n",percent);
        printf("\n");
    }
    return 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.