hdu 1408(高精度)坑人嫩
阿新 • • 發佈:2018-12-12
Problem Description
掛鹽水的時候,如果滴起來有規律,先是滴一滴,停一下;然後滴二滴,停一下;再滴三滴,停一下…,現在有一個問題:這瓶鹽水一共有VUL毫升,每一滴是D毫升,每一滴的速度是一秒(假設最後一滴不到D毫升,則花費的時間也算一秒),停一下的時間也是一秒這瓶水什麼時候能掛完呢? Input 輸入資料包含多個測試例項,每個例項佔一行,由VUL和D組成,其中 0<D<VUL<5000。 Output 對於每組測試資料,請輸出掛完鹽水需要的時間,每個例項的輸出佔一行。 Sample Input 10 1 Sample Output 13 不是我吐槽hdu,總是出一些看起來很水,就是過不了的題,唉。難為人呢。阿西吧。。一開始以為是整數,一直wa,後來百度了一下,是浮點數,高精度的。注意這一點就好了,就是一個模擬。我把一開始我錯的那個程式碼也掛出來吧,當做參考。┭┮﹏┭┮嗚嗚嗚。。 只考慮整數!!
#include<iostream> #include<cmath> using namespace std; const int maxx=5010; int a[maxx]; int val,k; void init() { a[1] = 1; for(int i=2;i<=5000;i++) a[i]=(1+i)*i/2; } int main() { init(); while(cin>>val>>k) { int i; int sum; for(i=1;;i++) { sum=a[i]*k; if((sum+(i+1)*k)>=val) break; } int y=val-sum; if(y==(i+1)*k) { cout<<a[i+1]+i<<endl; } else { if(y%k) { cout<<a[i]+(y/k+1)+i<<endl; } else { cout<<a[i]+(y/k)+i<<endl; } } } return 0; }
正確程式碼
#include<iostream> #include<cstdio> #include<cmath> #define esp 0.0000001 using namespace std; double d,v; int t=0; int main() { while(scanf("%lf%lf",&v,&d)!=EOF) { t=0; for(int i=1;v>0;i++) { if((v-i*d)<=0) { while(v>0.0000001) { v-=d; t++; } break; } v-=i*d; t+=i; t++; } printf("%d\n",t); } return 0; }
加油努力a啊,啊哈哈