江湖救急!!江湖救急,迷之全WA!!!
查看原帖
江湖救急!!江湖救急,迷之全WA!!!
367897
yuzh2005楼主2020/10/19 15:06
#include<bits/stdc++.h>
#define intu unsigned long long
using namespace std;
intu ans=0;
struct Q1{
	intu time,from,to;
}C1[10001];
intu C2[10001];
struct Q2{
	intu real,code;
}times[10001];
intu n,m,t;
intu ton[10001];
intu maxn[10001];
intu kmaxn[10001];
int ttt=0;
bool F1(Q2 a,Q2 b){
	if(a.real>b.real) return 1;
	else return 0;
}
bool F2(Q1 c,Q1 d){
	if(c.from<d.from) return 1;
	else if(c.from==d.from){
		if(c.time<d.time) return 1;
		else return 0;
	}
	else return 0;
}
bool F3(Q1 ee,Q1 ff){
	if(ee.to<ff.to) return 1;
	else return 0;
}
intu found_code(intu &x){
	for(intu r=1;r<=m;r++){
		ttt++;
		if(C1[r].from>x||(C1[r].from==0)) {
		return r-1;
	}
	    
    }
    //return ttt;
}
void add(){
	int ll=0;
	for(int i=1;;i++){
		if(C1[i].from==0) return;
		else{
			maxn[++ll]=C1[found_code(C1[i].from)].time;//maxn[1,5]
			i=ttt-1;
			continue;
		}
	}
}
void kadd(){//C2[1,4]
	for(int i=1;i<n;i++){
		kmaxn[i]=maxn[i]+C2[i];//kmaxn[2,9]
	}
}
void shut(){
	intu k=t;//t==2
	for(intu i=1;i<=m;i++){
		for(intu j=C1[i].from;j<C1[i].to;j++){
			times[j].real++;//times.real[2,2]
		}
		times[i].code=i;//times.code[1,2]
	}
	stable_sort(times+1,times+n,F1);
	for(intu i=1;i<n;i++){//kmaxn[2,9],maxn(C1[i].time:[1,5]),C2[1,4]->C2'[1,2],kmaxn'[2,7];
		if(maxn[times[i].code]+C2[times[i].code]-k>=maxn[times[i].code+1]/*||times[i].code==n*/){
			C2[times[i].code]-=k;
			return;
		}
	else if(maxn[times[i].code]+C2[times[i].code]>maxn[times[i].code+1]&&maxn[times[i].code]+C2[times[i].code]-k<maxn[times[i].code+1]){
		    C2[times[i].code]-=maxn[times[i].code]+C2[times[i].code]-maxn[times[i].code+1];
			k-=maxn[times[i].code]+C2[times[i].code]-maxn[times[i].code+1];
			continue;
		}
		else continue;
	}
	return;
}
int main(){
	cin>>n>>m>>t;//景点,人数,加速器个数。 
	for(intu i=1;i<n;i++){
		cin>>C2[i];
	}
	for(intu i=1;i<=m;i++){
		cin>>C1[i].time>>C1[i].from>>C1[i].to;
	}
	stable_sort(C1+1,C1+m+1,F2);
	add();
	shut();
	kadd();
	stable_sort(C1+1,C1+m+1,F3);
	int yyy=C1[1].to,lll=1;
	C1[0].to=C1[1].to;
	for(intu i=1;i<=m;i++){
		if(C1[i].to!=C1[i-1].to){
			++lll;
		}
		ans+=kmaxn[lll]-C1[i].time;
	}
	cout<<ans;
	return 0;
}

困扰了我整整三天了!!!

2020/10/19 15:06
加载中...