【TLE求调】P5661 [CSP-J2019] 公交换乘
  • 板块灌水区
  • 楼主Lanmer_Light
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/9/17 22:12
  • 上次更新2024/9/18 15:33:49
查看原帖
【TLE求调】P5661 [CSP-J2019] 公交换乘
1228347
Lanmer_Light楼主2024/9/17 22:12

rt

my code:

# include <bits/stdc++.h>

using namespace std;

// Part 1 主函数外定义部分 
struct Ticket{
	int price;
	int last; // 最迟使用时间 
	bool used; // 判断是否使用  
};

// Part 1.1 许久没干活的const干活了 
const int N = 100001;
// Part 1.2 这是个优惠券盒子 希望别装的溢出来 
Ticket yh[N];

int main(){
	// Part 2 输入部分 && 主函数内定义部分 
	int n;
	cin >> n;
	
	bool bus_subway;
	int t, pri, x = 0, y = 0; // Part 2.1 x和y是什么 懂得应该都懂 pri是每次输入的价格 
	int sum = 0; // Part 2.2 浅浅记录下钱钱的数量~ 
	// Part 3 主体代码 
	for (int i = 1; i <= n; i++){
		cin >> bus_subway >> pri >> t;
		
		if (!bus_subway){
			// Part 3.2 添加一张新票
			y++;
			yh[y].last = t + 45;
			yh[y].price = pri;
			yh[y].used = false;
			sum += pri;  
		} else { // Part 3.3 公交的情况 
			bool can = false; // Part 3.4 能否使用优惠券
			int new_x = x; // (记录一个新的x)
			for (int j = 1; j <= y; j++){
				if (yh[j].last < t){
					// Part 3.4 如果该票已过期 就改变左端点的值 
					new_x = j;
					continue; 
				}
				if ((yh[j].price >= pri) && (!yh[j].used)){
					can = true;
					yh[j].used = true;
					break;	
				}
			}
			// Part 3.5 刷新x的值 
			x = new_x;
			// Part 3.6 刷新sum的值 如果can是true sum就加 0 * pri 反之加 1 * pri
			sum += (!can) * pri; 
		}
	}
	// Part 4 华丽退场 
	
	cout << sum << endl;
	return 0;
}

顺便说一声 别在意我的注释。

2024/9/17 22:12
加载中...