2025-07-15 22:14:19
发布于:浙江
#include<bits/stdc++.h>
using namespace std;
class gongjiao
{
public:
bool chuxing;
long money=0;
long time[100000];
long i=0;
long timesun=0;
};
int main()
{
gongjiao a;
long long sum=0,s,r=1;
cin>>s;
for(int j=1;j<=s;j++)
{
cin>>a.chuxing>>a.money>>a.time[j];
if(a.chuxing==false)
{
sum+=a.money;
a.i++;
}
if(a.chuxing==true)
{
for(r=1;r<=a.i;r++)
{
if(a.timesun-a.time[r]>45)
{
sum+=a.money;
r=0;
break;
}
else
break;
}
}
a.timesun=a.time[j];
}
cout<<sum<<endl;
}
有没有大佬评评理,这题我哪里错了?
全部评论 1
为什么全WA?样例明明全对!
2025-07-16 来自 浙江
01.优惠票管理不当:
- 你使用了一个数组 time[100000] 来存储地铁乘车时间,但没有存储对应的地铁票价。
- 在公交车乘车时,你需要检查所有未过期的优惠票,并选择最早获得且票价 ≥ 公交车票价的优惠票。
- 你的代码中 r=0; break; 会导致逻辑错误,因为 r 是循环变量,重置它不会真正回到第一张优惠票。
2.时间比较错误:
- 公交车的时间 a.time[j] 应该与地铁的时间 a.time[r] 比较,而不是 a.timesun - a.time[r]。
- 正确的条件是:a.time[j] - a.time[r] <= 45。
3.优惠票未正确消耗:
- 一旦使用了一张优惠票,应该将其从可用优惠票中移除,否则可能会重复使用。
4.变量命名混乱:
- chuxing 是 bool 类型,但 0 代表地铁,1 代表公交车,容易混淆。
- timesun 的命名不清晰,建议改为 last_bus_time 或类似名称。
2025-07-16 来自 浙江
0可以使用以下代码
#include <bits/stdc++.h> using namespace std; class gongjiao { public: bool chuxing; // 0: 地铁, 1: 公交车 long money; long time[100000]; // 存储地铁乘车时间 long price[100000]; // 存储地铁票价(新增) long i = 0; // 地铁记录数 long timesun = 0; // 上一次乘车时间(公交或地铁) }; int main() { gongjiao a; long long sum = 0, s; cin >> s; for (int j = 1; j <= s; j++) { cin >> a.chuxing >> a.money >> a.time[j]; if (a.chuxing == false) { // 地铁 sum += a.money; // 地铁直接付费 a.price[++a.i] = a.money; // 记录地铁票价(修正索引从1开始) } else { // 公交车 bool used = false; // 遍历所有地铁记录,寻找可用优惠票 for (int r = 1; r <= a.i; r++) { if (a.time[j] - a.time[r] <= 45 && a.money <= a.price[r]) { // 使用这张优惠票(移除或标记为已用) // 由于是数组,我们无法直接删除,所以用覆盖法 a.price[r] = -1; // 标记为已用 used = true; break; } } if (!used) { sum += a.money; // 无可用优惠票,付费 } } a.timesun = a.time[j]; } cout << sum << endl; return 0; }
2025-07-16 来自 浙江
0<AI生成>
2025-07-16 来自 浙江
0
有帮助,赞一个