D. Expression Evaluation Error
题目大意:
给出一个十进制数,给出一个所需的数字个数,这几个数字之和为这个十进制数,并且使得其组成的数的11进制数最长,求出这一串数。
思路:
对于每一位,我们从左到右依次进行贪心,若想使得这个数的11进制表达最长,那么我们需要从左到右每一位都是最大值,但是我们也注意到,那么就是数每一位基本上都是
1
0
x
(
1
<
=
x
<
=
n
)
10^x(1<=x<=n)
10x(1<=x<=n),而题目要求中,需要为正数,所以对于所有位上,我们首先给每一位分配上一个
1
1
1,依次对从左到右每一位进行判断,并且输出即可。
#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#define pi 3.1415926535
#define me(a,b,c) memset(a,b,sizeof c)
#define eps 0.00000001
//#define x first
//#define y second
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
typedef pair<int, int> pii;
const int N = 1e6 + 10;
const int P = 131;
typedef unsigned long long ULL;
int main()
{
int t;
cin >> t;
while (t--)
{
ll s, n;
cin >> s >> n;
ll t = 1;
s -= n;
while (n>1)
{
while (t * 10 - 1 <= s)t *= 10;
s -= t;
cout << t << ' ';
t = 1;
n--;
s++;
}
if (s >= 0)cout << s + 1 << endl;
else cout << 1 <<endl;
}
}
// _ooOoo_
// o8888888o
// 88" . "88
// (| -_- |)
// O\ = /O
// ____/`---'\____
// .' \| |// `.
// / \||| : |||// \
// / _||||| -:- |||||- \
// | | \\ - /// | |
// | \_| ''\---/'' | |
// \ .-\__ `-` ___/-. /
// ___`. .' /--.--\ `. . __
// ."" '< `.___\_<|>_/___.' >'"".
// | | : `- \`.;`\ _ /`;.`/ - ` : | |
// \ \ `-. \_ __\ /__ _/ .-` / /
// ======`-.____`-.___\_____/___.-`____.-'======
// `=---='
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
// Buddha blesses the code with no bugs
// 1 2 3 4 5 6 7 8 9
// 0 1 3 0 4 1 7 0