站外题求助
  • 板块灌水区
  • 楼主EasonX
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/6/5 17:53
  • 上次更新2023/10/23 13:54:09
查看原帖
站外题求助
733488
EasonX楼主2023/6/5 17:53

题目如下:

部落冲突:

题目描述

你作为西佳佳部落的首领,今天将面临n场其他部落的挑衅,你需要调度投石器去抵御外敌。
为了消灭部落i派来的敌人,你需要ri个投石器,在时间si到ti进行战斗。
你的投石器每一场战役打完无需休息,直接可以投入下一场战斗。
请问你至少需要制造多少个投石器就能抵御所有外敌?

输入输出格式:

输入格式

第一行是正整数n代表有几批敌人。之后n行每行首先输入两个时间si和ti,由横杠隔开,时间格式AB:CD;再输入正整数ri。n<=10000,ri<=10000。

输出格式

输出投石器个数。

输入输出样例 输入样例1:

4
08:00-08:20 1
07:30-08:30 2
08:30-09:00 3
08:30-08:31 2

输出样例1:

5
#include<bits/stdc++.h>
using namespace std;
struct mov{long long t,s;} a[100005];
bool cmp(mov a,mov b){
	return a.s<b.s||a.s==b.s&&a.t<b.t;
}
long long n,ans,x[100005],cnt,c[100005],j;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int x,y,X,Y;
		cin>>x>>X>>y>>Y>>c[i];
		a[i].s=x*60+X;
		a[i].t=y*60+Y;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++){
		int cntn=0;
		for(j=1;j<=cnt;j++)if(a[i].s>=x[j]) break;
		if(cnt>j)x[i]=a[i].t;
		else cnt+=c[j],x[cnt]+=a[i].t-cntn;
	}
	cout<<cnt;
	return 0;
}

0pt求调,悬赏关注×\times3(真的有三个号)

2023/6/5 17:53
加载中...