NC15191. 硬币
描述
输入描述
输入的第一行有一个正整数T,代表询问数。
接下来有T行,每个询问各占1行,包含五个整数c1,c5,c10,c50,v,分别代表壁虎有的1元、5元、10元、50元的硬币数目以及此自动贩卖机里一件物品的价格。
输出描述
每个询问请输出一行包含一个整数,代表该询问的答案。
示例1
输入:
2 2 0 1 0 3 0 0 0 1 10
输出:
6 0
说明:
在第一个询问中,你共有2个1元硬币和1个10元硬币,自动贩卖机中一个物品的价格为3元。C++11(clang++ 3.9) 解法, 执行用时: 11ms, 内存消耗: 500K, 提交时间: 2020-02-29 16:46:43
#include<cstdio> int main() { int t; scanf("%d",&t); while(t--) { long long a,b,c,d,v; scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&v); long long V=(5-v%5)%5; printf("%lld\n",a+V*((b*5+c*10+d*50)/(v+V))); } return 0; }
Python3(3.5.2) 解法, 执行用时: 164ms, 内存消耗: 3456K, 提交时间: 2018-03-03 15:04:27
T = int(input()) for _ in range(T): c1,c5,c10,c50,v = map(int,input().split()) if v%5 == 0: print(c1) else: num = c5*5 + c10*10+c50*50 c1 += num//(v//5*5 +5) *(5-v%5) print(c1)
Python(2.7.3) 解法, 执行用时: 79ms, 内存消耗: 3052K, 提交时间: 2018-03-02 20:00:27
T=int(input()) while T>0 : T-=1 s=map(int,raw_input().split()) v=s[4] num=s[1]*5+s[2]*10+s[3]*50 t=(v-1)/5*5+5 ans=(num/t)*(t-v) num%=t ans+=max(0,num-v) print ans+s[0]
pypy3 解法, 执行用时: 218ms, 内存消耗: 51956K, 提交时间: 2022-08-25 19:12:06
t = int(input()) for i in range(t): c1,c5,c10,c50,v=map(int,input().split()) if v%5 == 0: print(c1) else: print(c1+(c5*5+c10*10+c50*50)//(v//5*5+5)*(5-v%5))