k52g @ 2024-08-13 19:58:24
得了三个AC,其余的不知道错在哪?
求大佬们指点
#include<bits/stdc++.h>
using namespace std;
int n;
int yyyy,mm,dd,hh,MM;
int yyy2,m2,d2,h2,M2;
int a[5000+10];
char ch[8+2];
long long ll,rr;
int cmp;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cin>>yyyy>>ch[1]>>mm>>ch[2]>>dd>>ch[3]>>hh>>ch[4]>>MM;
cin>>yyy2>>ch[1]>>m2>>ch[2]>>d2>>ch[3]>>h2>>ch[4]>>M2;
if(yyyy%100==0||yyyy%4!=0){
if(yyyy%100==0&&yyyy%400==0){
ll+=yyyy*366*24*60;
}else{
ll+=yyyy*365*24*60;
}
}else{
ll+=yyyy*366*24*60;
}
if(mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12){
ll+=31*24*60;
}else if(mm==2){
if(yyyy%100==0||yyyy%4!=0){
if(yyyy%100==0&&yyyy%400==0){
ll+=29*24*60;
}else{
ll+=28*24*60;
}
}else{
ll+=29*24*60;
}
}else{
ll+=30*24*60;
}
ll+=dd*24*60+hh*60+MM;
//___________________________________________________
if(yyy2%100==0||yyy2%4!=0){
if(yyy2%100==0&&yyy2%400==0){
rr+=yyy2*366*24*60;
}else{
rr+=yyy2*365*24*60;
}
}else{
rr+=yyy2*366*24*60;
}
if(m2==1||m2==3||m2==5||m2==7||m2==8||m2==10||m2==12){
rr+=31*24*60;
}else if(m2==2){
if(yyy2%100==0||yyy2%4!=0){
if(yyy2%100==0&&yyy2%400==0){
rr+=29*24*60;
}else{
rr+=28*24*60;
}
}else{
rr+=29*24*60;
}
}else{
rr+=30*24*60;
}
rr+=d2*24*60+h2*60+M2;
//___________________________________________________
int ji=rr-ll;
sort(a+1,a+n+1);
for(int i=1; ;i++){
if(ji>=a[i]){
cmp++;
ji-=a[i];
}else{
break;
}
}
cout<<cmp;
return 0;
}
谢谢大佬们
by lin20081016 @ 2024-08-13 20:14:32
我有一个简单的歪招,直接从开始日期一天一天加,每次用类似进位的方式判断年月的增减,直到距离考试时间不足一天,这样只要依据加上的天数(一天86400分钟)和剩下的时间差判断就好了,10000年只有约3650000天,不会超时
by lin20081016 @ 2024-08-13 20:40:06
说错了是1440分钟
by k52g @ 2024-08-16 12:49:31
@lin20081016 谢谢,我试一下