记录编号 22515 评测结果 AAAAAAAAAA
题目名称 求和 最终得分 100
用户昵称 Gravatar苏轼 是否通过 通过
代码语言 Pascal 运行时间 0.539 s
提交时间 2010-11-19 15:12:25 内存使用 0.49 MiB
显示代码纯文本
program suma(input,output);

type
  t_list=array[0..100000]of longint;

var
  i,j,a,b,n,k,p,ans,t:longint;
  sum:t_list;

procedure sort(const l,r: longint);
  var
    i,j,x,y: longint;
  begin
    i:=l;
    j:=r;
    x:=sum[(l+r) div 2];

    repeat
      while sum[i]<x do
        inc(i);

      while x<sum[j] do
        dec(j);

      if not(i>j) then
      begin
        y:=sum[i];
        sum[i]:=sum[j];
        sum[j]:=y;
        inc(i);
        dec(j);
      end;
    until i>j;

    if l<j then
      sort(l,j);

    if i<r then
      sort(i,r);
  end;

begin
  assign(input,'suma.in');
  reset(input);
  assign(output,'suma.out');
  rewrite(output);

  readln(n,k,p);

  for i:=1 to n do
  begin
    readln(a);
    sum[i]:=(sum[i-1]+a)mod p;
  end;

  sort(1,n);

  ans:=maxlongint;
  sum[0]:=-maxlongint div 100;
  sum[n+1]:=sum[0];
  if n>2500 then
    n:=2500;
  for i:=1 to n do
  begin
    j:=i-1;
    while sum[i]-sum[j]<k do
      dec(j);

    if sum[i]-sum[j]<ans then
      ans:=sum[i]-sum[j];
  end;

  writeln(ans);

  close(input);
  close(output);
end.