每到星期四,zy就像让别人给他50块钱去吃肯德基,而Belmaxi是个大善人,为了能让zy吃到肯德基,他给zy设计了这样一个游戏:第一天是星期四。接下来的几天里(包括第一天),zy每天上午8点坚持给Belmaxi发5块钱大红包,每到星期四晚上 23:59,Belmaxi就会检查一下,zy是否在此时之前连续7天(包括周四当天)都给他发了红包,如果是,那么Belmaxi就是发给zy一个价值50元的红包;否则Belmaxi只会给zy发一句嘲讽。经历了 n天之后,Belmaxi 翻了聊天记录,Belmaxi 知道哪些天,zy 忘记发他 5块钱,他现在给出 zy 忘记发钱的所有日期。Belmaxi 想知道自己的盈亏情况。 Input 第一行一个整数T,(T≤10^3) 每个样例第一行两个整数n,(n≤10^16),x,(x≤10^5),表示经过了n天,有x天zy忘记给钱了 接下来一行x个整数 ai,表示zy在第 ai 天忘记发红包了,保证 ai 按照升序给出。c++时间复杂度为1s
时间: 2024-04-17 13:28:56 浏览: 31
这个问题需要计算Belmaxi的盈亏情况,其中给定了经过了n天的时间和zy忘记给钱的日期列表。我们可以通过统计Belmaxi收到的红包天数和zy忘记发红包的天数来计算盈亏情况。
首先,我们读取整数T,表示测试样例的数量。
然后,对于每个测试样例,读取n和x,分别表示经过了n天和zy忘记给钱的天数。
接下来,读取x个整数,表示zy忘记发红包的日期列表,并按照升序排序。
接下来,初始化变量receivedDays为0,表示Belmaxi收到的红包天数;forgetCount为0,表示zy忘记发红包的天数。
然后,遍历zy忘记发红包的日期列表,对于每个忘记发红包的日期,检查是否满足连续7天没有忘记发红包。如果满足,则receivedDays增加7,否则forgetCount增加1。
最后,计算Belmaxi的盈亏情况。盈亏金额 = receivedDays * 50 - forgetCount * 5。
下面是C++的示例代码实现:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int T;
cin >> T;
for (int t = 0; t < T; t++) {
long long n, x;
cin >> n >> x;
vector<long long> forgetDays(x);
for (int i = 0; i < x; i++) {
cin >> forgetDays[i];
}
long long receivedDays = 0;
long long forgetCount = 0;
for (int i = 0; i < x; i++) {
if (i >= 6 && forgetDays[i] - forgetDays[i-6] <= 6) {
receivedDays += 7;
} else {
forgetCount++;
}
}
long long profitLoss = receivedDays * 50 - forgetCount * 5;
cout << profitLoss << endl;
}
return 0;
}
```
希望对你有所帮助!如有疑问,请随时提出。
阅读全文