题目描述
给定一个正整数 m。现有 Q 个询问,每个询问给定一个正整数 n,要求你从 1,4,9,16,…,m2 中取出若干个数(同一个数可以取出多次),使它们的和恰好为 n。问最少取出多少个数?(如果无解,则输出 −1)
输入格式
本题有多组数据。
第一行,一个正整数 T,代表数据组数。
对于每组数据:
第一行,两个正整数 m,Q。
下面 Q 行,每行一个正整数 n。
输出格式
对于每组数据的每个询问,输出一行一个正整数,表示答案。
5
1 5
1
2
3
4
5
5 5
8
20
25
37
49
11 1
179
13 1
507
19 1
841
1
2
3
4
5
2
2
1
4
4
3
3
4
提示
样例解释:
对于第一组数据,显然答案是 n,因为你只能取 1。
对于第二组数据:
- 8=22+22;
- 20=42+22;
- 25=52;
- 37=52+22+22+22;(或 37=42+42+22+12)
- 49=52+42+22+22;(或 49=42+42+42+12)
- 请注意,37=62+12 和 49=72 都不是合法的方案,因为该数据中 m=5。
本题采用捆绑测试。
Subtask 编号 |
m≤ |
n≤ |
分值 |
0 |
30 |
104 |
40 |
1 |
1018 |
30 |
2 |
500 |
对于 100% 的数据,1≤T≤30,1≤Q≤104,1≤m≤500,1≤n≤1018,单个测试点中所有数据的 m 的和(∑m)满足 1≤∑m≤500。