⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cowcycle.pas

📁 Magio牛的usaco源代码
💻 PAS
字号:
{
ID:maigoak1
PROG:cowcycle
}

program cowcycle;
const
  fs=56;rs=36;
var
  fin,fout:text;
  gear,ans:array[1..fs+rs]of byte;
  f,r,f1,f2,r1,r2,i:byte;
  minvar:real;
procedure update;
  var
    x:array[1..fs+rs]of real;
    total,i,j:integer;
    mean,variance:real;
  procedure qsort(s,t:integer);
    var
      i,j,p:integer;
      tmp:real;
    begin
      if s>=t then exit;
      p:=s+random(t-s+1);
      tmp:=x[p];
      x[p]:=x[s];
      i:=s;j:=t;
      repeat
        while (i<j) and (x[j]>=tmp) do dec(j);
        if i=j then break;
        x[i]:=x[j];inc(i);
        while (i<j) and (x[i]<=tmp) do inc(i);
        if i=j then break;
        x[j]:=x[i];dec(j);
      until i=j;
      x[i]:=tmp;
      qsort(s,i-1);
      qsort(i+1,t);
    end;
  begin
    if gear[f]/gear[f+1]<gear[1]/gear[f+r]*3 then exit;

    total:=0;
    for i:=1 to f do
      for j:=f+1 to f+r do begin
        inc(total);
        x[total]:=gear[i]/gear[j];
      end;

    qsort(1,total);

    dec(total);
    mean:=0;
    for i:=1 to total do begin
      x[i]:=x[i+1]-x[i];
      mean:=mean+x[i];
    end;
    mean:=mean/total;

    variance:=0;
    for i:=1 to total do
      variance:=variance+sqr(x[i]-mean);
    {As total doesn't change, 'variance:=variance/total' is omitted}

    if variance<minvar then begin
      minvar:=variance;
      ans:=gear;
    end;
  end;
procedure search(l:byte);
  var
    start,finish,i:byte;
  begin
    if l=1 then start:=f1 else if l=f+1 then start:=r1 else start:=gear[l-1]+1;
    if l>f then finish:=r2-(f+r)+l else finish:=f2-f+l;
    for i:=start to finish do begin
      if l=1 then if f2/r1<i/r2*3 then exit;
      gear[l]:=i;
      if l=f+1 then if gear[f]/i<gear[1]/r2*3 then exit;
      if (l<>f) or (gear[f]/r1>=gear[1]/r2*3) then
        if l=f+r then update else search(l+1);
    end;
  end;
begin
  assign(fin,'cowcycle.in');
  reset(fin);
  readln(fin,f,r);
  readln(fin,f1,f2,r1,r2);
  close(fin);

  minvar:=maxint;
  search(1);

  assign(fout,'cowcycle.out');
  rewrite(fout);
  for i:=1 to f-1 do
    write(fout,ans[i],' ');
  writeln(fout,ans[f]);
  for i:=f+1 to f+r-1 do
    write(fout,ans[i],' ');
  writeln(fout,ans[f+r]);
  close(fout);
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -