佳佳的魔法照片(mphoto)

算法:模拟

分析:本题没有什么技巧可言,快排一遍后增加额外值再快排一遍即可。水题~

program mphoto;



const

 maxn=50000;



var

 n,k:longint;

 w,s,d:array [0..maxn] of longint;

 e:array [1..10] of longint;



procedure init;

var

 i:longint;

begin

 fillchar(s,sizeof(s),0);

 readln(n,k);

 for i:=1 to 10 do read(e[i]);

 readln;

 for i:=1 to n do

  begin

   read(w[i]);

   d[i]:=i;

  end;

end;



procedure qsort(l,r:longint);

var

 i,j,m,t,t1:longint;

begin

 i:=l;

 j:=r;

 t1:=d[(l+r) div 2];

 m:=w[(l+r) div 2];

 repeat

  while ((w[i]>m) or ((w[i]=m) and (d[i]<t1))) do inc(i);

  while ((w[j]<m) or ((w[j]=m) and (d[j]>t1))) do dec(j);

  if i<=j then

   begin

    t:=w[i];

    w[i]:=w[j];

    w[j]:=t;

    t:=d[i];

    d[i]:=d[j];

    d[j]:=t;

    inc(i);

    dec(j);

   end;

 until i>j;

 if i<r then qsort(i,r);

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

end;



procedure main;

var

 i:longint;

begin

 for i:=1 to n do (w[i],e[(i-1) mod 10+1]);

end;



procedure print;

var

 i:longint;

begin

 for i:=1 to k do write(d[i],' ');

end;



begin

 assign(input,'mphoto.in'); reset(input);

 assign(output,'mphoto.out'); rewrite(output);

 

 init;

 qsort(1,n);

 main;

 qsort(1,n);

 print;

 

 close(input); close(output);

end.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值