洛穀 P1583 魔法照片【二級排序/結構體排序】

來源:互聯網
上載者:User

標籤:個數   +=   struct   分享   main   思路   view   bit   i++   

題目描述

一共有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 101 2 3 4 5 6 7 8 9 102 4 6 8 10 12 14 16 18 20
輸出範例#1: 複製
10 9 8 7 6 5 4 3 2 1

【分析】:

題目實際上指的是先給定你1~n號對應的權值,從大到小排序後根據當前次序再編第二次號,分類別加上對應的e[i],再次從大到小進行排序後輸出前k大權值分別的初始編號。注意!第二次編號與最終的編號輸出無關,僅用於分類。這道題大概的思路:輸入——排號——排序——分類加e[i]——排序——輸出。

【代碼】:
#include <bits/stdc++.h>using namespace std;struct node{    int w;    int l;}a[20005];bool cmp(node a,node b){    if(a.w==b.w)        return a.l<b.l;    else        return a.w>b.w;}int main(){    int n,k;    int e[15];    cin>>n>>k;    for(int i=0;i<10;i++)        cin>>e[i];    for(int i=0;i<n;i++)    {        cin>>a[i].w;        a[i].l=i+1;    }    sort(a,a+n,cmp);    for(int i=0;i<n;i++)    {        int tmp=i%10;        a[i].w+=e[tmp];    }    sort(a,a+n,cmp);    for(int i=0;i<k;i++)    {        cout<<a[i].l<<" ";    }    cout<<endl;    return 0;}
View Code

 

 



洛穀 P1583 魔法照片【二級排序/結構體排序】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.