1 solutions

  • 0
    @ 2025-3-26 17:53:11

    模拟一下游戏过程,直到每个怪物的健康点数变成 kk 或更少。然后我们可以认为 ii /th的怪物的健康值是 aimodka_i \bmod k ,而不是 aia_i (除非 aia_i 能被 kk 整除,那么剩余的健康值是 kk ,而不是 00 )。

    现在,所有怪物的生命值都在 11kk 之间,所以每次我们伤害一个怪物,都会杀死它。因此,生命值为 kk 的怪物会先死亡,然后是生命值为 k1k-1 的怪物,以此类推。因此,让我们按照剩余生命值从高到低对怪物进行排序(别忘了,如果两个怪物的生命值相同,则应按照指数进行比较)。排序后得到的顺序就是问题的答案。

    #include <bits/stdc++.h>
    using namespace std;
    const int N=300005;
    struct node
    {
    	int x,id;//x 是相当于 ai%k 
    }a[N];
    int n,k;
    bool cmp(node A,node B)
    {
    	if(A.x!=B.x) return A.x>B.x;
    	else return A.id<B.id; 
     } 
    int main()
    {
    	cin>>n>>k;
    	for(int i=1;i<=n;i++)
    	{
    		a[i].id=i;
    		cin>>a[i].x;
    		a[i].x=a[i].x%k;
    		if(!a[i].x) a[i].x=k;
    	}
    	sort(a+1,a+1+n,cmp);
    	for(int i=1;i<=n;i++)
    	{
    		cout<<a[i].id<<" ";
    	}
    }
    
    • 1

    Information

    ID
    1435
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    (None)
    # Submissions
    150
    Accepted
    20
    Uploaded By