佳佳的魔法照片 题解

题目id:11061

题目描述

佳佳的魔法照片(\(Magic\ Photo\)):如果你看过《哈利·波特》,你就会知道魔法世界里的照片是很神奇的。也许是因为小魔法师佳佳长的太帅,很多人都找他要那种神奇的魔法照片,而且还都要佳佳和他的MM的合照。那些照片可是非常珍贵的,他到底应该把照片给谁呢?
一共有\(n\)个人(以\(1\sim n\)编号)向佳佳要照片,而佳佳只能把照片给其中的\(k\)个人。佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值\(w_i\)。然后将初始权值从大到小进行排序,每人就有了一个序号\(D_i\)(取值同样是\(1\sim n\))。按照这个序号对\(10\)取模的值将这些人分为\(10\)类。也就是说定义每个人的类别序号\(C_i\)的值为\((D_i-1)\bmod 10+1\),显然类别序号的取值为\(1\sim 10\)。第\(i\)类的人将会额外得到\(E_i\)的权值。你需要做的就是求出加上额外权值以后,最终的权值最大的\(k\)个人,并输出他们的编号。在排序中,如果两人的\(w_i\)相同,编号小的优先。

解题思路

纯模拟,有一点要注意的是排序函数里要记得把编号从小到大排序,其余跟着题目模拟就好了。(其实是我懒得写)

AC Code

#include<bits/stdc++.h>
#define N 1000007
#define INF 1e18
#define MOD 998244353
#define LL long long
#define pb push_back
#define lb long double
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define IOS ios::sync_with_stdio(0),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
LL n,e[17],k;
struct node
{
    LL a,id;
}a[50001];
bool cmp(node x,node y)
{
    if(x.a!=y.a)
        return x.a>y.a;
    else
        return x.id<y.id;
}
int main()
{
    cin>>n>>k;
    for(LL i=1;i<11;++i)
        cin>>e[i];
    for(LL i=1;i<=n;++i)
    {
        cin>>a[i].a;
        a[i].id=i;
    }
    sort(a+1,a+n+1,cmp);
    for(LL i=1;i<=n;++i)
        a[i].a+=e[(i-1)%10+1];
    sort(a+1,a+n+1,cmp);
    for(LL i=1;i<=k;++i)
        cout<<a[i].id<<' ';
    return 0;
}
posted @ 2024-08-07 16:42  Firra3500  阅读(9)  评论(0编辑  收藏  举报