陶陶抢苹果(vijos1445)

本文介绍了一道简单的模拟算法题目解答过程。使用快速排序算法对两个数组进行排序,并通过模拟操作解决问题。代码中详细展示了初始化、排序及核心计算步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法:模拟
 

很裸的一道模拟题了,不解释了……


program VJ1445;

const
 maxn=100000;

var
 n,m:longint;
 a,b,ans,d,dd:array [0..maxn] of longint;

procedure init;
var
 i:longint;
begin
 fillchar(ans,sizeof(ans),0);
 readln(n,m);
 for i:=1 to n do read(a[i]);
 for i:=1 to m do 
  begin
   read(b[i]);
   d[i]:=i;
  end;
end;

procedure qsort1(l,r:longint);
var
 i,j,t1,t:longint;
begin
 i:=l;
 j:=r;
 t1:=a[(l+r) shr 1];
 repeat
  while a[i]>t1 do inc(i);
  while a[j]<t1 do dec(j);
  if i<=j then
   begin
    t:=a[i];
    a[i]:=a[j];
    a[j]:=t;
    inc(i);
    dec(j);
   end;
 until i>j;
 if i<r then qsort1(i,r);
 if l<j then qsort1(l,j);
end;

procedure qsort2(l,r:longint);
var
 i,j,t1,t:longint;
begin
 i:=l;
 j:=r;
 t1:=b[(l+r) shr 1];
 repeat
  while b[i]>t1 do inc(i);
  while b[j]<t1 do dec(j);
  if i<=j then
   begin
    t:=b[i];
    b[i]:=b[j];
    b[j]:=t;
    t:=d[i];
    d[i]:=d[j];
    d[j]:=t;
    inc(i);
    dec(j);
   end;
 until i>j;
 if i<r then qsort2(i,r);
 if l<j then qsort2(l,j);
end;

procedure teemp;
var
 i:longint;
begin
 for i:=1 to m do dd[d[i]]:=i;
end;

procedure main;
var
 i:longint;
begin
 for i:=1 to n do inc(ans[((i-1) mod m)+1],a[i]);
 for i:=1 to m do write(ans[dd[i]],' ');
end;

begin
 assign(input,'VJ1445.in'); reset(input);
 assign(output,'VJ1445.out'); rewrite(output);
 
 init;
 qsort1(1,n);
 qsort2(1,m);
 teemp;
 main;

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值