列表

详情


NC231932. 绝命沙虫

描述

风暴来,黄沙起,绝命沙虫剧毒见。

初始时你的手上有 N 元 RMB。

交易规则如下:


  • 你每次充值的数量必须是正整数,也就是说不能为零或负数。

  • 你通过出售 b 红点可以获得 元 RMB 和 点消费经验。 

  • 你通过出售 c 绿点可以获得 点消费经验。

给定 N,M,请回答你最后获得的消费经验是多少。

注意:任何时刻只要你手上有 RMB 或者有红点/绿点你都依次使用并且用光,你不会手上有而不用

输入描述

全文第一行输入一个整数 ,表示数据组数。

第一行输入两个数 ,分别表示初始拥有的 RMB 数量和充值返点倍率。

数据保证 N 是正整数,M 一定是一位小数。

输出描述

每行输出一个整数,你最后获得的消费经验是多少。

示例1

输入:

2
10 1.5
160 2.0

输出:

270
5760

说明:

对于样例 #1,充入 10 RMB,获得 10\times100=1000 红点和 10\times100\times(1.5-1)=500 绿点。

花掉它们,获得 \dfrac{1000}{10}+\dfrac{500}{10}=150 消费经验和 \dfrac{1000}{200}=5 RMB。

充入 5 RMB,获得 500 红点和 250 绿点;花掉它们,获得 50+25=75 消费经验和 2 RMB。

充入 2 RMB,获得 200 红点和 100 绿点;花掉它们,获得 20+10=30 消费经验和 1 RMB。

充入 1 RMB,获得 100 红点和 50 绿点;花掉它们,获得 10+5=15 消费经验。

结算(最终获得):150+75+30+15=270 消费经验。

对于样例 #2,充入 160 RMB,获得 16000 红点和 10000 绿点;转换成 80 RMB 和 2600 消费经验;

充入 80 RMB,获得 8000 红点和 8000 绿点;转换成 40 RMB 和 1600 消费经验;

充入 40 RMB,获得 4000 红点和 4000 绿点;转换成 20 RMB 和 800 消费经验;

\cdots

充入 1 RMB,获得 100 红点和 100 绿点;转换成 20 消费经验。

结算(最终获得):2600+1600+800+400+200+100+40+20=5760 消费经验。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 216ms, 内存消耗: 1072K, 提交时间: 2023-07-15 19:39:51

#include<bits/stdc++.h>
using namespace std;
int main(){
	int t;
	cin>>t;
	while(t--){
		int n;
		double m;
		cin>>n>>m;
		long long ans=0;
		while(n){
			ans+=10*n+min(1000,int(n*(10*m-10)));
			n/=2;
		}
		cout<<ans<<endl;
	}
}

pypy3 解法, 执行用时: 490ms, 内存消耗: 29332K, 提交时间: 2022-02-08 09:35:49

T=int(input())
while T:
    T-=1
    n,m=input().split()
    n=int(n)
    m=float(m)
    ans=0
    while n:
        ans+=n*10+min(1000,n*10*(m-1))
        n>>=1
    print("%d"%ans)

Python3 解法, 执行用时: 1866ms, 内存消耗: 5284K, 提交时间: 2022-10-11 13:41:11

for _ in range(int(input())):
    n,m=input().split()
    n=int(n);ans=0
    while n:
        ans+=n*10+min(1000,n*int(float(m)*10-10))
        n>>=1
    print(ans)

上一题