• P1583 魔法照片


    题目描述

    一共有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
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 int E[11];
     8 struct node
     9 {
    10     int cs;//初始 
    11     int xh;//序号
    12     int bh;//编号 
    13     int lbxh;// 类别序号 
    14 }a[500001]; 
    15 int comp(const node & a ,const node & b)
    16 {
    17     if(a.cs!=b.cs)
    18     return a.cs>b.cs;
    19     else
    20     return a.bh<b.bh;
    21 }
    22 int main()
    23 {
    24     int n,k;
    25     scanf("%d%d",&n,&k);
    26     for(int i=1;i<=10;i++)
    27         scanf("%d",&E[i]);
    28     for(int i=1;i<=n;i++)
    29         scanf("%d",&a[i].cs),a[i].bh=i;
    30     sort(a+1,a+n+1,comp);
    31     
    32     for(int i=1;i<=n;i++)
    33         a[i].xh=i;
    34     
    35     for(int i=1;i<=n;i++)
    36         a[i].cs+=E[(a[i].xh-1)%10+1];
    37         
    38     sort(a+1,a+n+1,comp);
    39     for(int i=1;i<=k;i++)
    40         printf("%d ",a[i].bh);
    41     return 0;
    42 }
  • 相关阅读:
    四、oracle 用户管理二
    三、oracle 用户管理一
    二、oracle sql*plus常用命令
    数据库的导入导出
    一:oracle系统包—-dbms_output用法
    数据库分类
    Oracle序列号详解
    Windows 下 java(JDK)的安装和环境变量的配置
    win7安装oracle 10g时发生“程序异常终止。发生内部错误”的提示
    对数据库列的操作
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/6853751.html
Copyright © 2020-2023  润新知