Physics Practical

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37891604/article/details/79979607

One day Vasya was on a physics practical, performing the task on measuring the capacitance. He followed the teacher's advice and did as much as n measurements, and recorded the results in the notebook. After that he was about to show the results to the teacher, but he remembered that at the last lesson, the teacher had made his friend Petya redo the experiment because the largest and the smallest results differed by more than two times. Vasya is lazy, and he does not want to redo the experiment. He wants to do the task and go home play computer games. So he decided to cheat: before Vasya shows the measurements to the teacher, he will erase some of them, so as to make the largest and the smallest results of the remaining measurements differ in no more than two times. In other words, if the remaining measurements have the smallest result x, and the largest result y, then the inequality y ≤ 2·x must fulfill. Of course, to avoid the teacher's suspicion, Vasya wants to remove as few measurement results as possible from his notes.

Help Vasya, find what minimum number of measurement results he will have to erase from his notes so that the largest and the smallest of the remaining results of the measurements differed in no more than two times.

题意:给出一个序列,求删除的序列中的数的最小的个数,使得序列中的最大值y,与最小值x,满足y<=2*x.

 先对给出的序列按升序排序,i从左到右枚举序列最小值,假设他是最小值时,需要删除的数的个数i-1+n-j+1.

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<math.h>
#include<algorithm>
#include<stack>
using namespace std;
typedef long long ll;
const int inf=1000000;
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    int n,a[200005],i,minn,j;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+1+n);
    minn=inf;
    j=1;
    for(i=1;i<=n;i++)
    {
        while(j<=n&&a[j]<=2*a[i])
        {
            j++;
        }
        minn=min(minn,i+n-j);
    }
    printf("%d\n",minn);
}


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页