关于list和deque
查看原帖
关于list和deque
249478
Fgju楼主2021/10/1 22:57
#include <iostream>
#include <list>
using namespace std;

const int USEFUL = 45;

typedef long long lglg;

struct ticket{
	int cost;
	lglg time;
	ticket(int c = 0,lglg t = 0){
		cost = c;
		time = t;
	}
};

bool findt(int c,lglg t,list<ticket>& fre){
	while (fre.front().time < t)
		fre.pop_front();
	//start >= t
	for (list<ticket>::iterator it = fre.begin();it != fre.end();++it){
		if (it->cost >= c){
			fre.erase(it);
			return true;
		}
	}
	return false;
}

int main(void){
	int n = 0;
	cin>>n;

	lglg temp[3];
	lglg paid = 0;
	lglg& type = temp[0];
	lglg& cost = temp[1];
	lglg& time = temp[2];


	list<ticket> fre;

	for (int i = 0;i < n;++i){
		cin>>type>>cost>>time;
		if (type){
			if (findt(cost,time,fre))
				continue;
			else
				paid += cost;
		}else{
			paid += cost;
			fre.push_back(ticket(cost,time+USEFUL));
		}
	}
	
	cout<<paid<<endl;
	return 0;
}

以上,不吸氧也可以AC。

但如果把这里所有的list都换成deque,那么程序会从#13开始RE。

2021/10/1 22:57
加载中...