zoukankan      html  css  js  c++  java
  • hdu 4268 Alice and Bob (贪心 2012 ACM/ICPC Asia Regional Changchun Online)

    http://acm.hdu.edu.cn/showproblem.php?pid=4268

    这道题把,比赛时想到了是贪心 ,而且是 贪的方法 和看的解题报告差不多 但是,比赛时,我们找到了 几个 例子觉的不对,就没有 往下想 ,汗。。。。。。。。。。。。

    明显的贪心 :

    先按第一维排序,然后第二维
    然后对a的每个i,找出小于a[i].h的b.h,将对应的w塞到集合里
    刚才已经保证了第一维满足了
    然后贪心的从集合里面找a[i]能覆盖的最大的w

     1 #include<cstdio>
     2  #include<cstring>
     3  #include<cmath>
     4  #include<iostream>
     5  #include<algorithm>
     6  #include<set>
     7  #include<map>
     8  #include<queue>
     9  #include<vector>
    10  #include<string>
    11  #define Min(a,b) a<b?a:b
    12  #define Max(a,b) a>b?a:b
    13  #define CL(a,num) memset(a,num,sizeof(a));
    14  #define eps  1e-12
    15  #define inf 100000000
    16  #define mx 1<<60
    17 
    18  const double pi  = acos(-1.0);
    19  const int  maxn = 101000;
    20  typedef   __int64  ll;
    21  using namespace std;
    22  struct node
    23  {
    24      int h;
    25      int w;
    26      int type;
    27  }a[maxn*2];
    28  multiset<int>s;
    29  int cmp(node a,node b)
    30  {
    31      if(a.h != b.h) return a.h < b.h;
    32      else
    33      if(a.w!=b.w) return a.w < b.w ;
    34      else return a.type > b.type ;
    35 
    36  }
    37  int main()
    38  {
    39      int t,n,i;
    40      scanf("%d",&t);
    41      while(t--)
    42      {
    43          scanf("%d",&n);
    44          for(i=0 ; i < n;i++)
    45          {
    46              scanf("%d %d",&a[i].h,&a[i].w);
    47              a[i].type = 0;
    48          }
    49           for(i = n ; i < 2*n;i++)
    50          {
    51              scanf("%d %d",&a[i].h,&a[i].w);
    52              a[i].type = 1;
    53          }
    54 
    55          sort(a,a+2*n,cmp);
    56          int ans = 0;
    57          s.clear();
    58          for(i = 0 ; i < 2*n;i++)
    59          {
    60              if(a[i].type == 1)
    61              {
    62                  s.insert(a[i].w);
    63 
    64              }
    65              else
    66              {
    67                 if(!s.empty())
    68                 {
    69                     if(*s.begin() <= a[i].w)
    70                     {
    71                         multiset <int>::iterator it = s.upper_bound(a[i].w);
    72                         it--;
    73                         ans++;
    74                         s.erase(it);
    75 
    76                     }
    77 
    78 
    79                 }
    80              }
    81          }
    82          printf("%d\n",ans);
    83 
    84      }
    85  }
  • 相关阅读:
    关于feign调用请求头丢失分析
    并发下编写SQL的注意事项
    Sentinel降级规则整理
    Mybatis-Plus使用整理
    Docker各种零散命令整理
    set集合怎么保证不重复的
    idea启动项目ava heap space
    网络穿透工具--钉钉HTTP穿透
    Log4j基本使用
    ide中普通java程序打包
  • 原文地址:https://www.cnblogs.com/acSzz/p/2677273.html
Copyright © 2011-2022 走看看