列表

详情


NC16760. 托米的赌球

描述

紧张刺激的世界杯正在进行中(在托米的世界线里),欧洲人托米沉迷于赌球无法自拔。
托米的口袋里有 100 元,50元,20元,10元,5元,2元,1元的纸币,50分,20分,10分,5分,2分,1分的硬币各无限个。
托米计划买下几注 a 元 b 分的彩票,他希望能支出的纸票数量和硬币数量之和最小,他希望你帮助他完成这个任务。同时由于彩票亭不支持找零,托米希望他的支出恰好等于 a 元 b 分

输入描述

第一行输入一个正整数 T下面 T 行每行两个整数 a,b

输出描述

每行输出 13 个正整数 n1 ...n13, 对应题面顺序给出最小化支出纸票数量和硬币数量之和的情况下,每种货币的使用次数,如果有多种方案,输出字典序最大的一种,注意这里字典序是依次比较n1到n13,而不是简单的把 13 个正整数拼接在一起

示例1

输入:

2
1 5
2 4

输出:

0 0 0 0 0 0 1 0 0 0 1 0 0
0 0 0 0 0 1 0 0 0 0 0 2 0

原站题解

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

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 348K, 提交时间: 2018-07-28 10:42:27

#include<cstdio>
using namespace std;
int T,a,b,x[10]={100,50,20,10,5,2,1},y[10]={50,20,10,5,2,1};
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&a,&b);
		for(int i=0;i<7;i++)
		{
			printf("%d ",a/x[i]);
			a%=x[i];
		}
		for(int i=0;i<6;i++)
		{
			printf("%d%c",b/y[i],i==5?'\n':' ');
			b%=y[i];
		}
	}
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 35ms, 内存消耗: 3320K, 提交时间: 2018-07-27 19:55:14

n=int(input())
c=[100,50,20,10,5,2,1];d=[50,20,10,5,2,1]
for i in range(n):
    ans=[]
    a,b=map(int,input().split())
    for j in c:
        ans.append(a//j)
        a%=j
    for j in d:
        ans.append(b//j)
        b%=j
    for j in range(len(ans)):
        print(ans[j],end=' ') if j<len(ans)-1 else print(ans[j])

C++11(clang++ 3.9) 解法, 执行用时: 2ms, 内存消耗: 352K, 提交时间: 2018-07-27 20:35:07

#include<cstdio>
using namespace std;
const int f[7]={100,50,20,10,5,2,1};
int T;
int main(){
	scanf("%d",&T);
	while(T--){
		int a,b,Ans=0;scanf("%d%d",&a,&b);
		for(int i=0;i<7;i++) printf("%d ",a/f[i]),a%=f[i];
		for(int i=1;i<7;i++) printf(i==6?"%d\n":"%d ",b/f[i]),b%=f[i];
	}
	return 0;
} 

上一题