洛谷P1583——魔法照片(结构体排序)

https://www.luogu.org/problem/show?pid=1583#sub

题目描述

一共有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<bits/stdc++.h>
 2 using namespace std;
 3 struct node
 4 {
 5     int w;
 6     int id;
 7 }num[20050];
 8 int cmp(node a,node b)
 9 {
10     if(a.w==b.w) return a.id<b.id;
11     else
12     return a.w>b.w;
13 }
14 int main()
15 {
16     int n,k;
17     int e[20];
18     cin>>n>>k;
19     for(int i=1;i<=10;i++)
20     cin>>e[i];
21     for(int i=1;i<=n;i++)
22     {
23         cin>>num[i].w;
24         num[i].id=i;
25     }
26     sort(num+1,num+n+1,cmp);
27     for(int i=1;i<=n;i++)
28     num[i].w+=e[(i-1)%10+1];
29     sort(num+1,num+n+1,cmp);
30     for(int i=1;i<=k;i++)
31     cout<<num[i].id<<" ";
32     return 0;
33 }
时间: 2024-08-09 13:51:29

洛谷P1583——魔法照片(结构体排序)的相关文章

洛谷 P1583 魔法照片

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]的权值.你需要做的就是求出加上额外权值

P1583 魔法照片

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]的权值.你需要做的就是求出加上额外权值

hdu 1070(结构体排序)

Milk Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13639    Accepted Submission(s): 3328 Problem Description Ignatius drinks milk everyday, now he is in the supermarket and he wants to choose

【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能讲讲其用法: 1.sort入门: 使用sort需要包含algorithm头文件,完整代码如下 #include<iostream> #include<vector> #include<algorithm>//貌似可以不用,但最好加上. using namespace std

HDU 1084 [What Is Your Grade?] 结构体排序

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1084 题目大意:共5道题,N个学生.做出5道满分,0道50分.做出1-4道的同学,若在前50%(向下取整),则获得95.85.75.65,若在后50%则获得90.80.70.60. 关键思想:结构体排序 //结构体排序,考虑边界 #include <iostream> #include <algorithm> #include <cmath> #include <me

C++结构体排序

在C++中,对结构体的排序方式比C语言丰富的多.在C语言中,我们主要是通过qsort进行排序操作(抛开手写排序算法不说). 在C++<algorithm>中,有一个十分强大的排序函数sort,他的内部综合了许多种排序算法,因此非常高效.并且,用它来对结构体排序也十分方便. 先贴一段示例代码: 1 #include <cstdio> 2 #include <queue> 3 #include <vector> 4 #include <algorithm&

结构体排序

经常碰到结构体排序的问题,在此总结一下.以一个简单的例题开始: 例1.有三个人(Person结构体),每个人都有name(string型)和age(int型)两个属性,现在需要按照下面的规则排序:先以姓名按从小到大排序(如abc<abd),如果姓名相同,则按照年龄从大到小排序. #include<iostream> #include<string> using namespace std; struct Person{ string name; int age; }; voi

HDOJ 1009. Fat Mouse&#39; Trade 贪心 结构体排序

FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 56784    Accepted Submission(s): 19009 Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats g

最小生成树模板+并查集(隐藏)+结构体排序模板

minn[101],g[101][101],u[101]; memset(u,1,sizeof(u)); memset(minn,0x7f,sizeof(minn)); minn[1]=0; u[1]=0; i,j,k,m; total=0; for(i=1;i<=n;i++) { k=0; for(j=1;j<=n;j++) if(u[j]&&(minn[k]>minn[j])) k=j; u[k]=0; for(j=1;j<=n;j++) if(u[j]&