NC16760. 托米的赌球
描述
输入描述
第一行输入一个正整数 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; }