问题标题: 酷町堂:1559 数据处理

0
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


0
0
0
0
我要回答