zoukankan      html  css  js  c++  java
  • Spoj-VISIBLEBOX Decreasing Number of Visible Box

    Shadowman loves to collect box but his roommates woogieman and itman don't like box and so shadowman wants to hide boxes as many as possible. A box can be kept hidden inside of another box if and only if the box in which it will be held is empty and the size of the box is at least twice as large as the size of the box.

    Print the minimum number of box that can be shown.

    Input

    The input set starts with single line integer T (1<=T<=50) the number of test cases. Then following T cases starts with an integer N (1<=N<=100000) denoting the number of box. The next line contains N space separated positive integer. i-th of them contains a numbers Ai(1<=Ai<=100000) size of the i-th box.

    Output

    Output the the case number and the minimum number of box that can be shown.

    Example

    Input:
    2
    4
    1 2 4 8
    4
    1 3 4 5
    
    Output:
    Case 1: 1
    Case 2: 3
    

    n个盒子要叠起来,大小为k的盒子可以放进大小为2k的空盒子里,问最少剩多少

    排个序贪心就好了,维护一个队列表示当前可以塞到其他盒子里的盒子,每次新来一个盒子的时候,把最小的那个塞进去

    最后答案就是队列大小了

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<algorithm>
     6 #include<cmath>
     7 #include<queue>
     8 #include<deque>
     9 #include<set>
    10 #include<map>
    11 #include<ctime>
    12 #define LL long long
    13 #define inf 0x7ffffff
    14 #define pa pair<int,int>
    15 #define mkp(a,b) make_pair(a,b)
    16 #define pi 3.1415926535897932384626433832795028841971
    17 #define mod 100007
    18 using namespace std;
    19 inline LL read()
    20 {
    21     LL x=0,f=1;char ch=getchar();
    22     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    23     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    24     return x*f;
    25 }
    26 int n,t,w,ans;
    27 int q[100010];
    28 int a[100010];
    29 inline void work(int cur)
    30 {
    31     n=read();
    32     for (int i=1;i<=n;i++)a[i]=read();
    33     sort(a+1,a+n+1);
    34     t=w=ans=0;
    35     for (int i=1;i<=n;i++)
    36     {
    37         if (t==w)q[++w]=a[i]*2,ans++;
    38         else if (q[t+1]<=a[i])t++,q[++w]=a[i]*2;
    39         else q[++w]=a[i]*2,ans++;
    40     }
    41     printf("Case %d: %d
    ",cur,ans);
    42 }
    43 int main()
    44 {
    45     int T=read(),tt=0;
    46     while (T--)work(++tt);
    47 }
    Spoj VISIBLEBOX
  • 相关阅读:
    PlayMaker 不支持过渡条件
    Unity Inspector 给组件自动关联引用(二)
    C# 重载和默认参数(那种情况下使用更好)
    Unity 开发游戏编写代码的技巧
    C# Conditional特性避免 预处理命令泛滥使用
    在DirectX12中使用Texture
    再探Lua的require
    如何实现水下效果
    n个骰子的点数
    用DirectX12实现Blinn Phong
  • 原文地址:https://www.cnblogs.com/zhber/p/7153384.html
Copyright © 2011-2022 走看看