Problem Description
Vasya is going to the Olympics in the city Ntown by train. The boy wants to read the textbook to prepare for the Olympics. He counted that he needed k hours for this. He also found that the light in the train changes every hour. The light is measured on a scale from 0 to 100, where 0 is very dark, and 100 is very light.
Vasya has a train lighting schedule for all n hours of the trip — n numbers from 0 to 100 each (the light level in the first hour, the second hour and so on). During each of those hours he will either read the whole time, or not read at all. He wants to choose k hours to read a book, not necessarily consecutive, so that the minimum level of light among the selected hours were maximum. Vasya is very excited before the upcoming contest, help him choose reading hours.
Input
The first input line contains two integers n and k (1 ≤ n ≤ 1000, 1 ≤ k ≤ n) — the number of hours on the train and the number of hours to read, correspondingly. The second line contains n space-separated integers ai (0 ≤ ai ≤ 100), ai is the light level at the i-th hour.
Output
In the first output line print the minimum light level Vasya will read at. In the second line print k distinct space-separated integers b1, b2, ..., bk, — the indexes of hours Vasya will read at (1 ≤ bi ≤ n). The hours are indexed starting from 1. If there are multiple optimal solutions, print any of them. Print the numbers bi in an arbitrary order.
Examples
| Input |
| 5 3 20 10 30 40 10 |
| Output |
| 20 1 3 4 |
| Input |
| 6 5 90 20 35 40 60 100 |
| Output |
| 35 1 3 4 5 6 |
Note
In the first sample Vasya should read at the first hour (light 20), third hour (light 30) and at the fourth hour (light 40). The minimum light Vasya will have to read at is 20.
题意:
有一盏灯,有 n 个小时,每个小时有一个亮度,现在要选择 k 个小时进行读书,要选择亮度最大的前 k 个,输出选择的里面最小的那个,并将选择的小时序号输出
思路:
记录每个灯的亮度与序号,第一次按亮度降序排序选前 k 个,首先输出第 k 个,然后再将这 k 个的序号暂存起来进行第二次排序,第二次排序时按序号升序排序,然后输出即可
代码:
#include<bits/stdc++.h>
const int N = 10000+5;
using namespace std;
struct Node{
int num;
int id;
bool operator <(const Node &rhs)const{
return num>rhs.num;
}
}a[N];
int res[N];
int main(){
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d",&a[i].num);
a[i].id=i;
}
sort(a+1,a+1+n);
printf("%d\n",a[k].num);
for(int i=1;i<=k;i++)
res[i]=a[i].id;
sort(res+1,res+1+k);
for(int i=1;i<=k;i++)
printf("%d ",res[i]);
printf("\n");
return 0;
}

Vasya乘坐火车去参加奥运会,他需要在火车上阅读k小时。火车的灯光每小时变化一次,亮度范围从0到100。Vasya需要找出亮度最高的k个小时来阅读,使得在这k个小时中,最低的亮度最大。输入包含火车的照明计划,输出最小亮度及所选阅读小时的序号。通过按亮度降序和序号升序两次排序,可以找到最优解。
1928

被折叠的 条评论
为什么被折叠?



