演算法競賽入門經典 UVa815 Flooded

2021-08-04 10:44:56 字數 1592 閱讀 9976

說實話,剛看到這題有點蒙,沒有什麼思路,第乙個蹦出來的東西居然是定積分那類的東西。

這一題我歷經千辛萬苦,可是最終還是wa,最開始完成提交之後tle錯誤,重新修改了初始化就好了。之後提交是wa錯誤,發現在輸入1*1的情況下不能正常執行。幾經除錯,感覺應該沒有什麼問題了。提交還是wa,然後在debug裡找別人提供的資料,一項項核對。發現一條不一樣的:

輸入:22

6675 

-21-27

輸出的高度是28.41,可是我輸出的資料為28.40,進行單步除錯,發現我的演算法顯示的資料是28.4049999999,別人ac的程式算出來是28.4050000004,最後這0.01的誤差害死人,看來是演算法本身就有問題。後來又嘗試吧上下界誤差改的比較小(1e-16)就顯示tle錯誤,吧誤差稍微改大一些,就是wa錯誤。又嘗試修改輸出的是誤差的上界或下界,這個樣例過了,還是wa。

**************這是wa**:

#include#include#include#include#define maxd  35*35

using namespace std;

int a[maxd];

int qiugao(int i1,int a,int b)

float qiugao2(int i,double r1,double a1,double a2, int rain)

if(c3>rain)

k = qiugao2(i,c1*1.0,a1*1.0,(a1+a2)*1.0/2.0,rain);

else

k = qiugao2(i,c3*1.0,(a1+a2)*1.0/2.0,a2*1.0,rain);

return k;

}int main()

hight = 0.0;

for( i = 1;i<=m*n;i++)

}printf("region %d\nwater level is %.2lf meters.\n",++kase,hight1);

printf("%.2lf percent of the region is under water.\n\n",per*100);

}return 0;

}

下面是別人ac的**,自己也重新寫過,感覺這種思考方式真是妙,自己怎麼就沒有想到呢,思路清晰又簡單》就說簡簡單單的一步:把輸入的總雨量/100,這樣就直接把三維問題轉為二維問題了。

#include #include #include #include #include using namespace std;

#define inf 0x7fffffff

int h[35 * 35], n, m;

double v, h, k;

int main()

}printf("region %d\n", ++kase);

printf("water level is %lf meters.\n", h);

printf("%.2lf percent of the region is under water.\n\n", 100.0 * k / (n - 1));

}return 0;

}

演算法競賽入門經典UVa 340

首先,要開闢兩個陣列用於儲存答案序列和猜測序列,正常的猜測序列不會有0,所以只需判斷第乙個數是否為0即可。對於輸出的a來說可以直接遍歷答案序列和猜測序列對應元素是否一樣來求得a。為了求b,對於每個數字 1 9 統計二者出現的次數c1,c2,則min c1,c2 就是該數字對b的貢獻。最後減去a的部分...

演算法競賽入門經典 UVa1587Box

這題一定要好好說道說道。這題第一次寫的時候,我居然二到,只判斷了兩個面相等,當然wa。調整之後,一直還是wa,接下來,bug就找了很久都沒有找到,第二天又花了很久時間再看,又修改了幾次輸入格式,懷疑我的輸入格式有問題,最終找到的問題是 我只判斷了第一條,第二條是4的,倍數,第三條沒有判斷,因為我原本...

演算法競賽入門經典 C 入門

include 提供輸入輸出流 include 提供常用演算法 using namespace std const int maxn 100 10 int a maxn int main return0 宣告陣列時,陣列大小可以用const宣告的常數。在c 中,這樣的寫法更加推薦。include i...