60分球调
  • 板块P1167 刷题
  • 楼主cgxd
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/20 16:50
  • 上次更新2024/4/20 19:16:13
查看原帖
60分球调
1272259
cgxd楼主2024/4/20 16:50
#include<bits/stdc++.h>
using namespace std;
const int d[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
deque<int> dq;
int n, k, cnt;
struct date{
	int year, month, day, hour, min;
}d1, d2;
bool run(int y){
	if(y % 4)
		return 0;
	if(y % 400 xor y % 100)
		return 0;
	return 1;
}bool operator<(date d1, date d2){
	if(d1.year != d2.year)
		return d1.year < d2.year;
	if(d1.month != d2.month)
		return d1.month < d2.month;
	return d1.day < d2.day;
}int operator-(date d1, date d2){
	int cnt = 0;
	if(!(d1 < d2 or d2 < d1))
		return (d1.hour - d2.hour) * 60 + d1.min - d2.min;
	if(d1.year == d2.year and d1.month == d2.month){
		cnt = (d1.day - d2.day) * 1440;
		d1.day = d2.day;
		return cnt + (d1 - d2);
	}if(d1.year == d2.year){
		for(int i = d2.month; i < d1.month; i++)
			cnt += d[i] + (i == 2 and run(d1.year));
		cnt *= 1440;
		d1.month = d2.month;
		return cnt + (d1 - d2);
	}date d3 = {d1.year, 2, 29, 0, 0};
	date d4 = {d2.year, 2, 29, 0, 0};
	for(int i = d2.year + (d2 < d4); i <= d1.year + (d3 < d1); i++){
		cnt += 365 + run(i);
	}d1.year = d2.year;
	return cnt * 1440 + (d1 - d2);
}int main(){
	cin >> n;
	while(n--){
		int k;
		cin >> k;
		dq.push_back(k);
	}sort(dq.begin(), dq.end());
	scanf("%d-%d-%d-%d:%d", &d1.year, &d1.month, &d1.day, &d1.hour, &d1.min);
	scanf("%d-%d-%d-%d:%d", &d2.year, &d2.month, &d2.day, &d2.hour, &d2.min);
	k = d2 - d1;
	while(1){
		k -= dq[0];
		if(dq.empty() or k < 0)
			break;
		cnt++;
		dq.pop_front();
	}cout << cnt;
	return 0;
}
2024/4/20 16:50
加载中...