萌新求助QAQ 能过样例和1#
查看原帖
萌新求助QAQ 能过样例和1#
922141
July_melon楼主2023/2/6 22:49
#include <stdio.h>
#include <stdlib.h>
int E[15];
int W[20005];
int D[20005];
int ans[20005];
int index[20005];
int n,k;
int cmp(const void*,const void*);
void bubblesort(int);
int main()
{
    scanf("%d%d",&n,&k);
    for(int i=0; i<10; i++)
        scanf("%d",&E[i]);//编号为i+1的人的额外权值;
    for(int i=0; i<n; i++)
        scanf("%d",&W[i]);
    for(int i=0; i<n; i++)
        index[i]=i;
    qsort(index,n,sizeof(int),cmp);//交换编号;index[i]+1为此人的编号;i为初始权值大小排序后的序号;
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
        {
            if(index[j]==i)
                ans[i]=W[i]+E[j%10];//ans中的i+1代表人的最初编号;
        }

    }//上述求值正确;

    for(int i=0; i<n; i++)
        index[i]=i+1;
    bubblesort(k);
    for(int i=n-1; i>=n-k; i--)
        printf("%d ",index[i]);
    return 0;

}

int cmp(const void*i1,const void*i2)
{
    int v1=*(int *)i1;
    int v2=*(int *)i2;
    if(W[v1]<W[v2])
        return 1;
    else
        return -1;
}

void bubblesort(int k)
{
    int temp1;
    int temp2;
    for(int i=0; i<k; i++)
    {
        for(int j=0; j<n-1; j++)
        {
            if(ans[j]>ans[j+1])
            {
                temp1=index[j];
                index[j]=index[j+1];
                index[j+1]=temp1;
                temp2=ans[j];
                ans[j]=ans[j+1];
                ans[j+1]=temp2;
            }
        }
    }
}

2023/2/6 22:49
加载中...