VIJOS-P1282アリソン魔法の写真

ロサンゼルスマジックバレーP1583の写真

羅区ポータル

JDOJ 1396:VIJOS-P1282アリソン魔法の写真

JDOJポータル

説明

nは、個人(1 - のid N)の合計アリソンへの写真のためには、アリソンは唯一の個々の写真は、それらをkにすることができながら。[i]はW初期重量を割り当てられ、それぞれの人との関係の程度や品質に応じアリソン。次いで降順初期重みは、各々が数D [i]のを( - nは同じ値が1である)を有します。この値に応じて第10号は、10個のカテゴリーに分け、これらの人々を法。すなわち、各カテゴリ番号C [i]の値(D [i]が-1)MOD 10 +1、カテゴリ番号1--10の見かけの値の定義です。I-階級の人々は、余分な重量E [I]を取得します。あなたは何をする必要がある余分な重量、最終的にk個の個人の最大重量、および出力その番号を追加した後に得られます。ソートで、W [i]と同じ、優先少数の二場合。

入力

スペースで分離された第1ライン出力二つの整数、それぞれ、nおよびk。第二線10は正の整数を与えられ、それぞれ、Eは、[1]〜[10] Eに。第三のラインは正の整数nを与えられ、人I重みW [i]はi番目の数を示します。

出力

それぞれスペースで区切られた整数kの出力のいずれか一方のみの行、最終W [i]は人々の数を降順。

サンプル入力

10 10 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20

サンプル出力

10 9 8 7 6 5 4 3 2 1

ヒント

データの50%を、N <= 200; 100データの%、nは<= 50 000、K <= 2000、すべての正の整数ではない以上32,767以下与えられます。

ソリューション:

水問題の構造の並べ替え、それは脳が曲がりを回す必要です。

JDOJカードのフォーマットに注意してください、特別な文を必要としています。

JDOJコードを接続します。

#include<iostream>
#include<algorithm>
using namespace std;
int n,e[17],k;
struct node
{
    int sum;
    int num;
}a[50001];
bool cmp(node x,node y)
{
    if(x.sum!=y.sum) return x.sum>y.sum;
    else return x.num<y.num;
}
int main()
{
    cin>>n>>k;
    for(int i=1;i<=10;i++)
        cin>>e[i];
    for(int i=1;i<=n;i++)
        cin>>a[i].sum,a[i].num=i;
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++)
        a[i].sum+=e[(i-1)%10+1];
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<k;i++)
        cout<<a[i].num<<' ';
    cout<<a[k].num;
    return 0;
}

おすすめ

転載: www.cnblogs.com/fusiwei/p/11293768.html