轻重搭配--贪心

原文链接 http://www.cnblogs.com/stul/p/10348542.html

轻重搭配 模拟 贪心

题目链接:https://nanti.jisuanke.com/t/36116

n个人,最少的门票,n/2张。

mid = (n-1)/2

然后 l = mid, r = n-1。两边比较,模拟一下过程,如果arr[i] * 2 < arr[j] 那就 n--。否则就 l--。去找下一个小于的数看是否能满足条件。

%100通过代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#include <bits/stdc++.h>

#define M 1000009

using namespace std;

 

int arr[M];

 

int main()

{

    int n,r,l,mid;

    cin>>n;

    for(int i = 0; i < n; i++)

        cin>>arr[i];

    sort(arr,arr+n);

    mid = (n-1)/2;

    l = mid, r = n-1;

    while(l >= 0 && r > mid)

    {

        if(arr[l]*2 <= arr[r])

        {

            n--;

            l--,r--;

        }

        else l--;

    }

    cout<<n<<endl;

    return 0;

}

 

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