9月7号网易第三题 喝咖啡 求助
题目描述
小Y很喜欢喝咖啡,但是同事告诉他经常喝咖啡可能不太好,所以小Y限制自己喝咖啡的间隔不能低于K天。
但是,在一个月30天当中,固定有M天是小Y最喜欢的游戏更新版本的日子,这个时候小Y一定会喝咖啡庆祝这些日子。
小Y想知道,在满足上面的条件下,这个月最多能喝多少次咖啡呢?
输入描述:
输入的第一行是一个正整数T(0<T<=500),表示样例个数。对于每一个样例,
第一行是两个正整数K(0<=K<=30)、M(0<=M<=30),分别表示喝咖啡的最小间隔和固定喝咖啡的日子。
接下来一行是M个不重复的由空格分隔的整数,表示小Y固定喝咖啡的日子。
题目保证这些日子按照从小到大的顺序给出,它们之间的间隔不会低于K天,且范围均在1到30之间(含1和30)。
输出描述:
对于每一组样例,输出一个正整数,表示小Y这个月最多能喝咖啡的次数。
示例1输入输出示例仅供调试,后台判题数据一般不包含示例
输入
复制
4
0 10
1 2 3 4 5 6 7 8 9 10
1 15
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29
1 7
5 9 13 17 21 25 29
1 0
输出
复制
30
15
15
15
说明
对于第一组样例,由于K为0,小Y每天都可以喝咖啡,因此输出30。
对于第二组样例,由于K为1,两次喝咖啡的日子之间至少间隔1天,所以只有输入中的15天可以喝咖啡,输出15。
对于第三组样例,除了输入中喝咖啡的日子,还有1,3,7,11,15,19,23,27这些日子可以喝咖啡,因此输出15。
对于第四组样例,没有固定喝咖啡的日子,由于K为1,小Y可以自由选择隔天喝一次,最多喝15次。
不知道我哪里错了,死活过不了,有哪个大佬可以说一下吗?非常感谢。
#include <iostream> #include <cstdio> #include <algorithm> #include <string> using namespace std; int main() { int T; cin >> T; for (int ii = 0; ii < T; ii++) { int k, m; cin >> k; cin >> m; if (m == 0) { cout << 30 / (k + 1) << endl; } else { int day[30]; for (int i = 0; i < m; i++) { cin >> day[i]; } if (k == 0) { cout << 30 << endl; } else { int myday[30]; int num = 1; int i = 0; while (num < 31) { myday[i++] = num; //生成隔m天喝的日子,从1开始 num = num + k + 1; } for (int h = 0; h < m; h++) { myday[i++] = day[h]; //合并固定喝咖啡的日子数组 } sort(myday, myday + i); int result = unique(myday, myday + i) - myday; //去重 cout << result << endl; } } } return 0; }