CSP-J 2024 T3 sol

George222 Lv3

思路:分讨

根据特殊性质,我们可以发现:

  1. 对于 A,我们发现全放 8 就能满足条件。
  2. 对于 B,此时全放使用个数最多的 8 不能满足,还需要一位,所以我们可以最小化首位数字大小,即填上 10

根据上述讨论,我们发现解决的核心即为最小化数字位数,全部填入 8,然后在不增加位数的情况下改变某些数字(前三位)使得总木棍数正好为

每个 都可以表示为 ,答案数字位数应为

然后进行分讨:
0. 不替换,前三位 888

  1. 替换前两位为 10,前三位 108
  2. 替换第一位为 1,前三位 188
  3. 替换前三位为 200,前三位 200
  4. 替换前两位为 20,前三位 208
  5. 替换第一位为 2,前三位 288
  6. 替换第一位为 6,前三位 688

由于我使用的全为更改前三位 (因为我懒) 所以答案为两位数的()都被我算出来并特判,具体见代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>
using namespace std;
int T, n;
int main()
{
cin >> T;
while (T--)
{
cin >> n;

// 特判
int sth[15] = {-1, -1, 1, 7, 4, 2, 6, 8, 10, 18, 22, 20, 28, 68, 88};
// 分讨
int num[7] = {888, 108, 188, 200, 208, 288, 688};

if (n <= 14)
cout << sth[n] << "\n";
else
{
cout << num[n % 7];
for (int i = 1; i <= (n - 1) / 7 - 2; i++)
cout << 8;
cout << "\n";
}
}
return 0;
}
  • 标题: CSP-J 2024 T3 sol
  • 作者: George222
  • 创建于 : 2024-10-26 21:13:15
  • 更新于 : 2024-10-26 21:16:12
  • 链接: https://george110915.github.io/CSP-J 2024 T3 sol/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
此页目录
CSP-J 2024 T3 sol