zoukankan      html  css  js  c++  java
  • 洛谷 1583——魔法照片(排序Ex)

    题目描述

    一共有n(n≤20000)个人(以1–n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人。佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i]。然后将初始权值从大到小进行排序,每人就有了一个序号D[i](取值同样是1–n)。按照这个序号对10取模的值将这些人分为10类。也就是说定义每个人的类别序号C[i]的值为(D[i]-1) mod 10 +1,显然类别序号的取值为1–10。第i类的人将会额外得到E[i]的权值。你需要做的就是求出加上额外权值以后,最终的权值最大的k个人,并输出他们的编号。在排序中,如果两人的W[i]相同,编号小的优先。

    输入输出格式

    输入格式:
    第一行输入用空格隔开的两个整数,分别是n和k。

    第二行给出了10个正整数,分别是E[1]到E[10]。

    第三行给出了n个正整数,第i个数表示编号为i的人的权值W[i]。

    输出格式:
    只需输出一行用空格隔开的k个整数,分别表示最终的W[i]从高到低的人的编号。

    输入输出样例

    输入样例#1:
    10 10
    1 2 3 4 5 6 7 8 9 10
    2 4 6 8 10 12 14 16 18 20
    输出样例#1:
    10 9 8 7 6 5 4 3 2 1


    快排后模拟。


    代码如下:

    var  e:array[1..10]of longint;
         a,b:array[1..50000]of longint;
         n,k,i:longint;
    
    procedure sort(l,r: longint);
    var
      i,j,x,y,z: longint;
    begin
      i:=l;
      j:=r;
      z:=b[(l+r) div 2];
      x:=a[(l+r) div 2];
      repeat
        while (a[i]>x)or(a[i]=x)and(b[i]<z) do inc(i);
        while (x>a[j])or(b[j]>z)and(a[j]=x) do dec(j);
        if not(i>j) then
          begin
            y:=a[i];
            a[i]:=a[j];
            a[j]:=y;
            y:=b[i];
            b[i]:=b[j];
            b[j]:=y;
            inc(i);
            j:=j-1;
          end;
      until i>j;
      if l<j then sort(l,j);
      if i<r then sort(i,r);
    end;
    
    begin
      readln(n,k);
      for i:=1 to 10 do read(e[i]);
      for i:=1 to n do begin read(a[i]); b[i]:=i; end;
      sort(1,n);
      for i:=1 to n do inc(a[i],e[(i-1) mod 10+1]);
      sort(1,n);
      for i:=1 to k do write(b[i],' ');
    end.
  • 相关阅读:
    hdu acm 2844 Coins 解题报告
    hdu 1963 Investment 解题报告
    codeforces 454B. Little Pony and Sort by Shift 解题报告
    广大暑假训练1 E题 Paid Roads(poj 3411) 解题报告
    hdu acm 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
    hdu acm 1114 Piggy-Bank 解题报告
    poj 2531 Network Saboteur 解题报告
    数据库范式
    ngnix 配置CI框架 与 CI的简单使用
    Vundle的安装
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412423.html
Copyright © 2011-2022 走看看