cgxd @ 2024-04-20 16:50:38
#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;
}