问:是否是日期计算的问题?(玄关)
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 1e6 + 10;
int n,y,m,d,h,mi,y_1,m1,d1,h1,mi1,tim,ans,k = 1,a[MAXN];
map<int,int> mon;
void start() {
//map映射每月天数
mon[1] = 31;
mon[2] = 28;
mon[3] = 31;
mon[4] = 30;
mon[5] = 31;
mon[6] = 30;
mon[7] = 31;
mon[8] = 31;
mon[9] = 30;
mon[10] = 31;
mon[11] = 30;
mon[12] = 31;
}
//判断闰年
bool is_yyear(int x) {
return (x % 100 != 0 && x % 4 == 0) || (x % 400 == 0);
}
//如果不是同一年时计算时间
void compute_time() {
bool run = false;
int day = 0;
//如果这不是某年的1月1日00:00就让y++稍后再处理
if(m != 1 || d != 1 || h != 0 || mi != 0) {
run = true;
y ++;
}
//计算整年的天数
for(int year = y;year < y_1;year ++) {
for(int month = 1;month <= 12;month ++) {
day += mon[month];
if(is_yyear(year) && month == 2) {
day ++;
}
}
}
// printf("day:%d\ntime:%d\n",day,tim);
if(h != 0 || mi != 0) {
d ++;
tim += 60 * (24 - h - 1) + (60 - mi);
h = 0,mi = 0;
}
if(d != 1) {
if(is_yyear(y) && m == 2) {
day += mon[m] - d + 2;
}
else {
day += mon[m] - d + 1;
}
d = 1;
m ++;
}
//处理少的日期
if(run) {
for(int i = m;i <= 12;i++) {
if(is_yyear(i) && i == 2) {
day ++;
}
day += mon[i];
}
}
//处理多的日期
if(m1 != 1 || d1 != 1 || h1 != 0 || mi1 != 0) {
tim += 60 * h1 + mi1;
for(int i = 1;i < m1;i++) {
day += mon[i];
if(is_yyear(i) && i == 2) {
day ++;
}
}
day += d1;
}
// printf("day:%d\ntime:%d\n",day,tim);
tim += day * 24 * 60;
// printf("time2:%d\n",tim);
}
//同一年处理
void compute_time2() {
//同一天处理
if(d == d1) {
tim = (h1 - h - 1) * 60 + (60 - mi) + mi1;
// cout << tim << endl;
return ;
}
//非同一天
int day = 0;
if(d != 1 || h != 0 || mi != 0) {
tim += 60 * (24 - h - 1) + (60 - mi);
d ++;
h = 0,mi = 0;
day += mon[m] - d + 1;
if(is_yyear(y) && m == 2) {
day ++;
}
d = 0;
m ++;
}
for(int i = m;i < m1;i++) {
if(is_yyear(y) && i == 2) {
day ++;
}
day += mon[i];
}
// printf("day:%d\n",day);
tim += h1 * 60 + mi1;
day += d1;
tim += day * 24 * 60;
// cout << day << endl;
}
signed main() {
start();
scanf("%d",&n);
for(int i = 1;i <= n;i++) {
scanf("%d",&a[i]);
}
scanf("%d-%d-%d-%d:%d",&y,&m,&d,&h,&mi);
scanf("%d-%d-%d-%d:%d",&y_1,&m1,&d1,&h1,&mi1);
if(y != y_1) {
compute_time();
}
else {
compute_time2();
}
sort(a + 1,a + n + 1);
while(tim >= 0) {
ans ++;
tim -= a[k];
k ++;
}
cout << ans - 1 << endl;
return 0;
}