2017.5.27测试 2. 刷题(P1167)

来源:互联网 发布:力学软件 编辑:程序博客网 时间:2024/06/08 04:33

2 刷题

(c.pas/cpp/c)

【题目背景】

“好啊!一言为定!!”,作为蒟蒻的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[1..12]of longint=(31,28,31,30,31,30,31,31,30,31,30,31);//每个月的天数type arr=array[1..6]of longint;var s:string; a:array[0..5000]of longint; b,c:array[1..6]of longint; n,i,j,x,y,z,ans:longint; t:qword;procedure qsort(l,r:longint);//快排~var i,j,key,temp:longint;begin if l>=r then exit; i:=l;j:=r; key:=a[l+random(r-l+1)]; repeat  while (a[i]<key) do inc(i);  while (a[j]>key) do dec(j);  if i<=j then   begin    temp:=a[i];a[i]:=a[j];a[j]:=temp;    inc(i);dec(j);   end; until i>j; qsort(l,j); qsort(i,r);end;procedure try(var x:arr);//拆分并转换回数字~var ss:string; t:longint;begin t:=pos('-',s); while t<>0 do  begin   inc(j);   ss:=copy(s,1,t-1);   val(ss,x[j]);   if j=3 then x[6]:=x[6]+x[j]*24*60;//一天有24个小时,有24*60分钟(那x天也一样)   delete(s,1,t);   t:=pos('-',s);  end; t:=pos(':',s); inc(j); ss:=copy(s,1,t-1); val(ss,x[j]); x[6]:=x[6]+x[j]*60;//一小时有60个分钟(那x小时也一样) delete(s,1,t); inc(j); ss:=copy(s,1,2); val(ss,x[j]); x[6]:=x[6]+x[j];//分钟就是分钟啦end;begin readln(n); for i:=1 to n do readln(a[i]); qsort(1,n); readln(s); try(b); j:=0; readln(s); try(c); for i:=1 to b[2]-1 do b[6]:=b[6]+d[i]*24*60;//b[2]-1是因为目前在该月,没有超过 for i:=1 to c[2]-1 do c[6]:=c[6]+d[i]*24*60; t:=c[6]-b[6];//统计一下 for i:=b[1] to c[1]-1 do  if (i mod 4=0) and (i mod 100<>0) or (i mod 400=0) and (i mod 100=0)then t:=t+366*24*60 //判断闰年                                                                      else t:=t+365*24*60; for i:=1 to n do  if t>=a[i] then begin                   t:=t-a[i];                   inc(ans);                  end             else break; writeln(ans);end.

原创粉丝点击