题目描述

一共有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
思路:模拟
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,k;
int e[];
struct nond{
int num,id;
}v[];
int cmp(nond a,nond b){
if(a.num==b.num) return a.id<b.id;
return a.num>b.num;
}
int main(){
scanf("%d%d",&n,&k);
for(int i=;i<=;i++) scanf("%d",&e[i]);
for(int i=;i<=n;i++){
scanf("%d",&v[i].num);
v[i].id=i;
}
sort(v+,v++n,cmp);
for(int i=;i<=n;i++) v[i].num+=e[(i-)%+];
sort(v+,v++n,cmp);
for(int i=;i<=k;i++) cout<<v[i].id<<" ";
}
 昨天,学妹扔我帮她调一下这个题的代码,当时时间太晚了,加上那个题目也忘了,所以看了一段时间,但是没看出来。
  今天又看了一遍题目。
  一眼就发现了问题所在。
  
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int n,k;
int e[];
struct s
{
int w;
int c;
int d;
}m[];
int cmp(s x,s y)
{
if(x.w==y.w) return x.d<y.d;
return x.w>y.w;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<;i++)
scanf("%d",&e[i]);
for(int i=;i<n;i++)
{
scanf("%d",&m[i].w);
m[i].d=i+;
m[i].c=i%+;
}
sort(m,m+n,cmp);
for(int i=;i<n;i++)
for(int j=;j<;j++)
if(m[i].c==j+) m[i].w+=e[j];
sort(m,m+n,cmp);
for(int i=;i<k;i++)
printf("%d ",m[i].d);
return ;
}
/*
14 3
9 2 5 4 0 0 0 0 0 0
1 1 3 4 9 2 8 2 8 8 8 7 1 9 5 7 9
*/

这是学妹的代码。


然后,她的错误就十分显然了。

题目中有这么一句话:

这显然是她没有注意到的。

然后,这个题目改完后的代码应该是长得这个样子:

#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int n,k;
int e[];
struct s
{
int w;
int d;
}m[];
int cmp(s x,s y)
{
if(x.w==y.w) return x.d<y.d;
return x.w>y.w;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<;i++)
scanf("%d",&e[i]);
for(int i=;i<n;i++)
{
scanf("%d",&m[i].w);
m[i].d=i+;
}
sort(m,m+n,cmp);
for(int i=;i<n;i++) m[i].w+=e[i%];
sort(m,m+n,cmp);
for(int i=;i<k;i++)
printf("%d ",m[i].d);
return ;
}
/*
14 3
9 2 5 4 0 0 0 0 0 0
1 1 3 4 9 2 8 2 8 8 8 7 1 9 5 7 9
*/
 

洛谷 P1583 魔法照片的更多相关文章

  1. 洛谷 P1583魔法照片 & P1051谁拿了最多奖学金 & P1093奖学金

    题目:https://www.luogu.org/problemnew/show/P1583 思路:sort sort sort //#include<bits/stdc++.h> #in ...

  2. 洛谷 P1583 魔法照片【二级结构体排序】

    题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序 ...

  3. (水题)洛谷 - P1583 - 魔法照片

    https://www.luogu.org/problemnew/show/P1583 设计一个strcut cmp用来比较,就可以了. #include<bits/stdc++.h> u ...

  4. 洛谷P1583 魔法照片【模拟+排序】

    一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序,每人就有 ...

  5. 洛谷P1583 魔法照片

    https://www.luogu.org/problem/P1583 话不多说,其实就是模拟,然后,各种繁琐 #include<bits/stdc++.h> using namespac ...

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

    https://www.luogu.org/problem/show?pid=1583#sub 题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人. ...

  7. Java实现 洛谷 P1583 魔法照片

    import java.util.*; class Main{ public static void main(String[] args) { Scanner in = new Scanner(Sy ...

  8. 洛谷 U87561 魔法月饼

    洛谷 U87561 魔法月饼 洛谷传送门 题目背景 \(9102\)年的中秋节注定与往年不同...因为在\(9102\)年的中秋节前夕,\(Seaway\)被告知今年的中秋节要新出一款月饼--魔法月饼 ...

  9. [洛谷P1822] 魔法指纹

    洛谷题目连接:魔法指纹 题目描述 对于任意一个至少两位的正整数n,按如下方式定义magic(n):将n按十进制顺序写下来,依次对相邻两个数写下差的绝对值.这样,得到了一个新数,去掉前导0,则定义为ma ...

随机推荐

  1. hdu 1051 - 贪心,水题

    题目链接 一堆小木棍,每个有两个属性值(l,w),对小木棍分组,每一组内的小木棍存在这样一个序列满足s1<=s2<=s3.....<=sn,[s1<=s2当且仅当s1.l< ...

  2. span文本自动换行

    .span{ word-wrap: break-word; word-break: break-all; overflow: hidden; }

  3. 强化学习(3)-----DQN

    看这篇https://blog.csdn.net/qq_16234613/article/details/80268564 1.DQN 原因:在普通的Q-learning中,当状态和动作空间是离散且维 ...

  4. python 之 MRO 异常

    今天突然遇到这个异常,先贴两个地址,待有时间写博客 https://www.jianshu.com/p/fea6e0a0cc14 https://makina-corpus.com/blog/meti ...

  5. WebKit.NET-0.5简单应用(2)——音量解决方案

    查找WebKit.NET相关文档,没有找到音量控制解决方法.换思路进行解决,尝试用Win32 API进行解决 [DllImport("winmm.dll")] public sta ...

  6. [CTSC2012]熟悉的文章(广义后缀自动机+二分答案+单调队列优化DP)

    我们对作文库建出广义后缀自动机.考虑用\(SAM\)处理出来一个数组\(mx[i]\),表示从作文的第\(i\)个位置向左最远在作文库中出现的子串的长度.这个东西可以在\(SAM\)上跑\(trans ...

  7. LAMP环境搭建备忘 -- Apache、pHp 安装 (二)

    上一篇 Linux 已经安装好了,我们选择了 CentOS 7 的最小化安装,即没有图形界面,并且我们在安装时设置了网络连接即能够连上外部网络,还设置了 root 密码.下面我们要在此基础上继续安装 ...

  8. TCP/IP、UDP、 Http、Socket的差别

    网络由上往下分为: 表示层和应用层 :HTTP协议(基于传输层的TCP协议,主要解决怎样包装数据) 会话层 传输层: TCP协议(基于网络层的IP协议).TPC/IP协议(主要解决数据怎样在网络中传输 ...

  9. poj3252-Round Number 组合数学

    题目: Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8492   Accepted: 2963 ...

  10. new,malloc,GlobalAlloc具体解释

    WINDOWS下最好的方式是用VirtualAlloc分配内存,他不是在堆,也不是栈,而是直接在进程的地址空间中保留一快内存.尽管用起来最不方便. 可是速度快,也最灵活 new,malloc,Glob ...