0
已解决
汪恺恒
中级启示者
中级启示者
题目描述 Description
计算机处理每一个数据都需要一定的时间,现在假设有n个数据,每个数据处理所需要的时间不同(以分钟计算),要求在固定时间段之间处理完尽量多的数据。(假设计算机可以一直连续的工作,不会出现中断情况)
输入描述 Input Description
第一行一个整数N,需要处理的数据组数,N≤5000。
接下来N行,每行一个整数表示处理该组数据需要用的时间,以分钟记,小于等于10000。
接下来两行表示的开始时间和终止时间。时间给出的格式是:yyyy-mm-dd-hh:min,例如:2007-06-23-02:00,采用24小时制,每天从00:00~23:59,年份从0000到9999。
输出描述 Output Description
一行,一个整数,时间段内最多能处理的数据组数。
WA80
#include<iostream>
#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
int a[10000],n,ans,total;
int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int func(int year,int month){
int ans=0;
for(int i=0;i<=year;i++){
if(i%4==0&&i%100!=0||i%400==0){
ans++;
}
}
if(month<3&&(year%4==0&&year%100!=0||year%400==0)){
ans--;
}
return ans;
}
int f(int year1,int year2,int month1,int month2,int day1,int day2,int hours1,int hours2,int minute1,int minute2){
int cday1=0,cday2=0,sday1=0,sday2=0;
cday1=func(year1,month1);
cday2=func(year2,month2);
for(int i=0;i<month1-1;i++){
sday1+=b[i];
}
for(int i=0;i<month2-1;i++){
sday2+=b[i];
}
sday1+=day1+cday1+365*year1;
sday2+=day2+cday2+365*year2;
return (sday2*24*60+hours2*60+minute2-sday1*24*60-hours1*60-minute1);
}
int year1,year2,month1,month2,day1,day2,hours1,hours2,minute1,minute2;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
scanf("%d-%d-%d-%d:%d",&year1,&month1,&day1,&hours1,&minute1);
scanf("%d-%d-%d-%d:%d",&year2,&month2,&day2,&hours2,&minute2);
total=f(year1,year2,month1,month2,day1,day2,hours1,hours2,minute1,minute2);
for(int i=1;i<=n;i++){
if(a[i]<=total){
ans++;
total-=a[i];
}
}
cout<<ans;
return 0;
}
汪恺恒在2021-02-07 18:26:21追加了内容
ding
汪恺恒在2021-02-08 08:39:09追加了内容
ddd
汪恺恒在2021-02-08 11:35:13追加了内容
ddd