每到星期四,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++ time limit per test 1 second
时间: 2024-04-17 10:28:58 浏览: 67
给定的问题是关于Belmaxi和zy的一个游戏,其中zy每天早上8点给Belmaxi发5块钱的红包,如果zy连续7天都发红包,Belmaxi会给zy发一个价值50元的红包,否则只会嘲讽zy。现在给出Belmaxi知道的zy忘记发钱的日期列表,要求计算Belmaxi的盈亏情况。
根据题目描述,我们可以使用以下步骤来解决问题:
1. 读取输入的整数T,表示测试样例的数量。
2. 对于每个测试样例,读取n和x,分别表示经过了n天和zy忘记给钱的天数。
3. 读取x个整数,表示zy忘记发红包的日期列表,并按升序排序。
4. 初始化变量receivedDays为0,表示Belmaxi收到的红包天数;forgetCount为0,表示zy忘记发红包的天数。
5. 遍历zy忘记发红包的日期列表,对于每个忘记发红包的日期,检查是否满足连续7天没有忘记发红包。如果满足,则receivedDays增加7,否则forgetCount增加1。
6. 计算Belmaxi的盈亏情况。盈亏金额 = receivedDays * 50 - forgetCount * 5。
7. 输出盈亏金额。
下面是更新后的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;
}
```
希望这次的回答能满足你的需求!如果还有其他问题,请随时提问。
阅读全文