刷题

【题目背景】

“好啊!一言为定!!”,作为蒟蒻的GJY竟然约定和神犇来一场世纪大战。

【题目描述】

GJY在期末的时候跟神犇约定了一次战争,这对于GJY来说可是一件具有挑战性并十分困难的事情。所有GJY从现在开始就要努力学习,认真学习。GJY为了赢过神犇可以不惜一切代价,就算是让她废寝忘食也是可以的。“不吃饭,不睡觉,不吃零食多思考”是她的宣战格言。给定一个GJY开始奋斗的时间,精确到分钟单位(xxxx[年]-yy[月]-zz[日]-hh[时]-ss[分]),和一个她和神犇大战的时间(xxxx[年]-yy[月]-zz[日]-hh[时]-ss[分])。GJY还有一种特殊的能力,就是她可以判断出她做一道题要花的时间,但她因为判断废了太多的脑力,所以就请聪明的你帮她看一下他在这一段时间内最多可以做多少道题目,GJY的命运就靠你来计算了。

【输入格式】

第一行输入一共有n道题目;

接下来2到n+1行输入这道题需要花费的时间。

n+2行输入GJY开始奋斗的时间(xxxx[年]-yy[月]-zz[日]-hh[时]:ss[分]);

n+3行输入GJY和神犇约定好的时间(xxxx[年]-yy[月]-zz[日]-hh[时]:ss[分]);

【输出格式】

一行输出在此时间内GJY最多能做多少题目。

【样例输入】

4

1

1

1

1

2017-1-21-11:29

2017-1-21-11:30

【样例输出】

1

样例解释:GJY一共有一分钟的时间可以做题,在这一分钟内她可以做一道题,所以答案为1.

【数据范围】

对于100%的数据,n≤5000,每道题所要花的时间≤10000




程序:

const
d:array[0..12]of longint=(0,31,28,31,30,31,30,31,31,30,31,30,31);
var
sum,tj,s1,s2:int64;
i,n,year1,year2,month1,month2,day1,day2,hour1,hour2,m1,m2:longint;
zfc1,zfc2:string;
a:array[0..10010]of longint;
procedure aa;
var
mode:longint;
begin
    val(copy(zfc1,1,pos('-',zfc1)-1),year1,mode);
    delete(zfc1,1,pos('-',zfc1));
    val(copy(zfc1,1,pos('-',zfc1)-1),month1,mode);
    delete(zfc1,1,pos('-',zfc1));
    val(copy(zfc1,1,pos('-',zfc1)-1),day1,mode);
    delete(zfc1,1,pos('-',zfc1));
    val(copy(zfc1,1,pos(':',zfc1)-1),hour1,mode);
    delete(zfc1,1,pos(':',zfc1));
    val(zfc1,m1,mode);
end;
procedure bb;
var
mode:longint;
begin
    val(copy(zfc2,1,pos('-',zfc2)-1),year2,mode);
    delete(zfc2,1,pos('-',zfc2));
    val(copy(zfc2,1,pos('-',zfc2)-1),month2,mode);
    delete(zfc2,1,pos('-',zfc2));
    val(copy(zfc2,1,pos('-',zfc2)-1),day2,mode);
    delete(zfc2,1,pos('-',zfc2));
    val(copy(zfc2,1,pos(':',zfc2)-1),hour2,mode);
    delete(zfc2,1,pos(':',zfc2));
    val(zfc2,m2,mode);
end;
procedure kp(l,r:longint);
var
i,j,mid:longint;
begin
    if l>=r then exit;
    i:=l;j:=r;mid:=a[(l+r) div 2];
    repeat
         while a[i]<mid do inc(i);
         while a[j]>mid do dec(j);
         if i<=j then
         begin
             a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];
             inc(i);dec(j);
         end;
    until i>j;
    kp(l,j);
    kp(i,r);
end;
begin
    readln(n);
    for i:=1 to n do
    readln(a[i]);
    readln(zfc1);
    readln(zfc2);
    aa;
    bb;
    s1:=m1+hour1*60+(day1-1)*1440;
    s2:=m2+hour2*60+(day2-1)*1440;
    for i:=1 to month1-1 do
    s1:=s1+d[i]*1440;
    for i:=1 to month2-1 do
    s2:=s2+d[i]*1440;
    for i:=year1 to year2-1 do
    if (i mod 4=0)and(i mod 100<>0)or(i mod 400=0) then s2:=s2+527040 else s2:=s2+525600;
    sum:=s2-s1;
    kp(1,n);
    tj:=0;
    for i:=1 to n do
    if sum>=a[i] then
    begin
        sum:=sum-a[i];
        inc(tj);
    end;
    write(tj);
end.

原文地址:https://www.cnblogs.com/YYC-0304/p/9500108.html