日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

绝命沙虫 精度,double,模拟 牛客白月赛44

發(fā)布時(shí)間:2025/3/19 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 绝命沙虫 精度,double,模拟 牛客白月赛44 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

鏈接:https://ac.nowcoder.com/acm/contest/11221/C
來(lái)源:??途W(wǎng)

時(shí)間限制:C/C++ 1秒,其他語(yǔ)言2秒
空間限制:C/C++ 262144K,其他語(yǔ)言524288K
64bit IO Format: %lld
題目描述
風(fēng)暴來(lái),黃沙起,絕命沙蟲(chóng)劇毒見(jiàn)。

初始時(shí)你的手上有 NN 元 RMB。

交易規(guī)則如下:

你通過(guò)充值 aa 元可以獲得 a\times100a×100 紅點(diǎn)和 \min{10000,a\times100\times(M-1)}min{10000,a×100×(M?1)} 綠點(diǎn),其中 MM 是充值返點(diǎn)倍率。

你每次充值的數(shù)量必須是正整數(shù),也就是說(shuō)不能為零或負(fù)數(shù)。

你通過(guò)出售 bb 紅點(diǎn)可以獲得 \left\lfloor\dfrac{200}\right\rfloor?
200
b
?
? 元 RMB 和 \left\lfloor\dfrac{10}\right\rfloor?
10
b
?
? 點(diǎn)消費(fèi)經(jīng)驗(yàn)。

你通過(guò)出售 cc 綠點(diǎn)可以獲得 \left\lfloor\dfrac{c}{10}\right\rfloor?
10
c
?
? 點(diǎn)消費(fèi)經(jīng)驗(yàn)。

給定 N,MN,M,請(qǐng)回答你最后獲得的消費(fèi)經(jīng)驗(yàn)是多少。

注意:任何時(shí)刻只要你手上有 RMB 或者有紅點(diǎn)/綠點(diǎn)你都依次使用并且用光,你不會(huì)手上有而不用。
輸入描述:
全文第一行輸入一個(gè)整數(shù) T(1\le T\le10^5)T(1≤T≤10
5
),表示數(shù)據(jù)組數(shù)。

第一行輸入兩個(gè)數(shù) N(1\le N\le10^5),M(1.1\le M\le2.0)N(1≤N≤10
5
),M(1.1≤M≤2.0),分別表示初始擁有的 RMB 數(shù)量和充值返點(diǎn)倍率。

數(shù)據(jù)保證 NN 是正整數(shù),MM 一定是一位小數(shù)。
輸出描述:
每行輸出一個(gè)整數(shù),你最后獲得的消費(fèi)經(jīng)驗(yàn)是多少。
示例1
輸入
復(fù)制
2
10 1.5
160 2.0
輸出
復(fù)制
270
5760
說(shuō)明
對(duì)于樣例 #1,充入 1010 RMB,獲得 10\times100=100010×100=1000 紅點(diǎn)和 10\times100\times(1.5-1)=50010×100×(1.5?1)=500 綠點(diǎn)。

花掉它們,獲得 \dfrac{1000}{10}+\dfrac{500}{10}=150
10
1000
?
+
10
500
?
=150 消費(fèi)經(jīng)驗(yàn)和 \dfrac{1000}{200}=5
200
1000
?
=5 RMB。

充入 55 RMB,獲得 500500 紅點(diǎn)和 250250 綠點(diǎn);花掉它們,獲得 50+25=7550+25=75 消費(fèi)經(jīng)驗(yàn)和 22 RMB。

充入 22 RMB,獲得 200200 紅點(diǎn)和 100100 綠點(diǎn);花掉它們,獲得 20+10=3020+10=30 消費(fèi)經(jīng)驗(yàn)和 11 RMB。

充入 11 RMB,獲得 100100 紅點(diǎn)和 5050 綠點(diǎn);花掉它們,獲得 10+5=1510+5=15 消費(fèi)經(jīng)驗(yàn)。

結(jié)算(最終獲得):150+75+30+15=270150+75+30+15=270 消費(fèi)經(jīng)驗(yàn)。

對(duì)于樣例 #2,充入 160160 RMB,獲得 1600016000 紅點(diǎn)和 1000010000 綠點(diǎn);轉(zhuǎn)換成 8080 RMB 和 26002600 消費(fèi)經(jīng)驗(yàn);

充入 8080 RMB,獲得 80008000 紅點(diǎn)和 80008000 綠點(diǎn);轉(zhuǎn)換成 4040 RMB 和 16001600 消費(fèi)經(jīng)驗(yàn);

充入 4040 RMB,獲得 40004000 紅點(diǎn)和 40004000 綠點(diǎn);轉(zhuǎn)換成 2020 RMB 和 800800 消費(fèi)經(jīng)驗(yàn);

\cdots?

充入 11 RMB,獲得 100100 紅點(diǎn)和 100100 綠點(diǎn);轉(zhuǎn)換成 2020 消費(fèi)經(jīng)驗(yàn)。

結(jié)算(最終獲得):2600+1600+800+400+200+100+40+20=57602600+1600+800+400+200+100+40+20=5760 消費(fèi)經(jīng)驗(yàn)。

思路 :

  • 直接模擬即可
  • 關(guān)于double的精度問(wèn)題 :double類型在計(jì)算時(shí)轉(zhuǎn)化為二進(jìn)制故有損失,例如 double a = 3.0 - 2.6,結(jié)果是0.39999999,這就是精度損失
  • 這里模擬的公式中由于m是double類型,因此m - 1也是double類型,會(huì)有精度損失
  • 解決方案有兩種 :1.依靠乘10(這里保證m只有一位小數(shù))化為整型;2.加一個(gè)特別小的數(shù)然后向下取整(強(qiáng)轉(zhuǎn)int),注意強(qiáng)轉(zhuǎn)int是在最后整個(gè)公式的結(jié)果處,而不是double運(yùn)算處
#include <iostream> using namespace std;typedef long long ll;int main() {int _; cin >> _;while (_ -- ){int n;double m;cin >> n >> m;ll r = 0, g = 0;ll res = 0;while (n){r = n * 100, g = min(10000, (int)(n * 100 * (m + 0.00000000000001 - 1)));res += r / 10 + g / 10;n = r / 200;}cout << res << endl;} } #include <iostream> using namespace std;typedef long long ll;int main() {int _; cin >> _;while (_ -- ){int n;double m;cin >> n >> m;ll r = 0, g = 0;ll res = 0;while (n){r = n * 100, g = min(10000, (int)(n * 10 * (10 * m - 10)));res += r / 10 + g / 10;n = r / 200;}cout << res << endl;} }

總結(jié)

以上是生活随笔為你收集整理的绝命沙虫 精度,double,模拟 牛客白月赛44的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。