posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          日歷

          <2008年4月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          相冊(cè)

          搜索

          •  

          積分與排名

          • 積分 - 337506
          • 排名 - 167

          最新評(píng)論

          URAL 1011

          Posted on 2008-04-23 22:44 ZelluX 閱讀(819) 評(píng)論(10)  編輯  收藏 所屬分類(lèi): Algorithm

          Problem

          Every bus in the Ekaterinburg city has a special man (or woman) called conductor. When you ride the bus, you have to give money to the conductor. We know that there are more then P% conductors and less then Q% conductors. Your task is to determine a minimal possible number of Ekaterinburg citizens.


          我只能說(shuō)太挫了。。。精度問(wèn)題搞了半天,看來(lái)浮點(diǎn)還是要盡量化成整型再算啊。


          還有個(gè)問(wèn)題就是q*i是開(kāi)區(qū)間還是閉區(qū)間,總之Wrong Answer了無(wú)數(shù)次后總算過(guò)了。。。

          評(píng)論

          # re: URAL 1011  回復(fù)  更多評(píng)論   

          2008-04-24 19:22 by luohandsome
          double也不行么

          # re: URAL 1011  回復(fù)  更多評(píng)論   

          2008-04-24 20:53 by ZelluX
          一開(kāi)始用的是double,別人可以過(guò),不過(guò)我搞不定,還是用整型了

          # re: URAL 1011[未登錄](méi)  回復(fù)  更多評(píng)論   

          2008-05-02 20:24 by dave
          請(qǐng)教一下:
          既然dp, dq只有兩位小數(shù),那么
          int p = floor(dp * 100 + 0.5);

          int p = dp * 100;
          有區(qū)別嗎?

          # re: URAL 1011  回復(fù)  更多評(píng)論   

          2008-05-03 09:03 by ZelluX
          @dave
          當(dāng)然有,實(shí)際保存的時(shí)候是浮點(diǎn)啊,如果是dp = 49.9999999這種情況呢?

          # re: URAL 1011[未登錄](méi)  回復(fù)  更多評(píng)論   

          2008-05-03 13:18 by dave
          謝謝。
          那為什么要四舍五入呢?即int p = floor(dp * 100 + 0.5);中的"+0.5"?

          # re: URAL 1011  回復(fù)  更多評(píng)論   

          2008-05-03 17:33 by ZelluX
          @dave
          49.99999999這種情況不四舍五入不是就錯(cuò)了嗎。。。

          # re: URAL 1011[未登錄](méi)  回復(fù)  更多評(píng)論   

          2008-05-04 10:36 by dave
          我把“Numbers are given with 2 digits precision”理解為輸入時(shí)即保證dp只有兩位小數(shù)的,因此我開(kāi)始認(rèn)為int p = dp * 100;就可以了(因?yàn)閐p * 100是正整數(shù))。然而,實(shí)際的情況是:輸入為double(小數(shù)點(diǎn)后6或7位),但程序只保存兩位,因此需要四舍五入?但舍入誤差會(huì)不會(huì)造成在某些輸入數(shù)據(jù)下求得的i不是最小的滿足條件的值(只不過(guò)原題測(cè)試數(shù)據(jù)較弱)?
          如果這次理解仍然有誤,請(qǐng)你稍微詳細(xì)解釋下。比如“49.99999999這種情況不四舍五入不是就錯(cuò)了嗎”?

          這一題看似簡(jiǎn)單,但的確煩人。打擾你了。謝謝。

          # re: URAL 1011  回復(fù)  更多評(píng)論   

          2008-05-04 11:44 by ZelluX
          @dave
          “只有兩位小數(shù)”只是說(shuō)輸入的時(shí)候是這樣,但實(shí)際讀進(jìn)來(lái)的時(shí)候是用double保存的,前者是定點(diǎn),后者是浮點(diǎn),轉(zhuǎn)換的時(shí)候容易出現(xiàn)誤差。
          比如輸入了48.00,有可能在操作過(guò)程中就變成47.9999999(關(guān)于這個(gè)問(wèn)題可以看看Computer System: A Programmer's Perspective的第二張浮點(diǎn)部分)
          對(duì)于這種情況就需要進(jìn)行四舍五入了。
          考慮到浮點(diǎn)誤差的問(wèn)題(另外浮點(diǎn)計(jì)算速度也比定點(diǎn)慢很多),所以我建議能用定點(diǎn)就盡量先轉(zhuǎn)到定點(diǎn)。
          int p = floor(dp * 100 + 0.5) 這樣四舍五入就避免了浮點(diǎn)導(dǎo)致的誤差。
          之后再用定點(diǎn)(整型)計(jì)算就不會(huì)有誤差了。

          # re: URAL 1011[未登錄](méi)  回復(fù)  更多評(píng)論   

          2008-05-04 15:05 by dave
          非常感謝你的耐心,我明白了。
          你的blog很棒,+U~

          # re: URAL 1011  回復(fù)  更多評(píng)論   

          2008-06-15 07:49 by 爍爍
          有人會(huì)PAS版的嗎?
          51La
          主站蜘蛛池模板: 涿州市| 潮州市| 荣昌县| 南漳县| 夏津县| 板桥市| 安岳县| 隆林| 故城县| 南涧| 郴州市| 西吉县| 九龙城区| 福安市| 青川县| 通辽市| 舞钢市| 南充市| 土默特右旗| 肥西县| 崇左市| 马山县| 溆浦县| 桂阳县| 泰和县| 富阳市| 东辽县| 富裕县| 尖扎县| 宜良县| 宿迁市| 固阳县| 凤冈县| 柘城县| 广水市| 罗城| 兴安盟| 洛宁县| 四会市| 鄂托克前旗| 安陆市|