• 5月6日


    poj3614

    题意:

    有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值,太大就晒伤了,太小奶牛没感觉。而刚开始的阳光的强度非常大,奶牛都承受不住,然后奶牛就得涂抹防晒霜,防晒霜的作用是让阳光照在身上的阳光强度固定为某个值。那么为了不让奶牛烫伤,又不会没有效果。给出了L种防晒霜。每种的数量和固定的阳光强度也给出来了.每个奶牛只能抹一瓶防晒霜,最后问能够享受晒太阳的奶牛有几个。

    分析:将奶牛按照可以忍受光强的最大值从小到大排序,然后用一个从小到大取数值的优先队列维护各种防晒霜即可。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <algorithm>
     7 #include <set>
     8 #include <map>
     9 #include <bitset>
    10 #include <cmath>
    11 #include <queue>
    12 #include <stack>
    13 using namespace std;
    14 const int maxn=2502;
    15 typedef struct p
    16 {
    17     int minx,mx;
    18 }p;
    19 p s[maxn];
    20 int vis[maxn];
    21 int c,l;
    22 bool cmp(p a,p b)
    23 {
    24     return a.mx<b.mx;
    25 }
    26 int main()
    27 {
    28     while(cin>>c>>l)
    29     {
    30         for(int i=0;i<c;i++)
    31             cin>>s[i].minx>>s[i].mx;
    32         memset(vis,0,sizeof(vis));
    33         priority_queue<int,vector<int>, greater<int> > que;
    34         for(int i=0;i<l;i++){
    35             int x,y;
    36             scanf("%d%d",&x,&y);
    37             for(int i=0;i<y;i++)
    38                 que.push(x);
    39         }
    40         sort(s,s+c,cmp);
    41         int cnt=0;
    42         while(!que.empty()){
    43             int t=que.top();
    44             que.pop();
    45             for(int i=0;i<c;i++){
    46                 if(!vis[i]&&t>=s[i].minx&&t<=s[i].mx){
    47                     vis[i]=1; cnt++; break;
    48                 }
    49             }
    50         }
    51         cout<<cnt<<endl;
    52     }
    53     return 0;
    54 }
    View Code

     poj2010

    题意:

    奶牛大学招生,从C头奶牛中招收N头。它们分别得分score_i,需要资助学费aid_i。希望新生所需资助不超过F,找出其中得分中位数最高。求此中位数。

    分析:非常好的题目,参考了题解才做出来的。我们先把奶牛按照分数递增的顺序进行排列,然后我们分别对与每一个数i,使其作为中位数,分别统计前num个和后num个数的aid值,然后最后枚举一下,找出dp1[i]+dp2[i]+s[i].aid<=f的最大i,求出s[i].score即可

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <algorithm>
     7 #include <set>
     8 #include <map>
     9 #include <bitset>
    10 #include <cmath>
    11 #include <queue>
    12 #include <stack>
    13 using namespace std;
    14 const int inf=2000000000;
    15 const int maxn=100020;
    16 typedef struct p
    17 {
    18     int score,aid;
    19 }p;
    20 p s[maxn];
    21 int n,c,f;
    22 bool cmp(p a,p b)
    23 {
    24     return a.score<b.score;
    25 }
    26 int dp1[maxn],dp2[maxn];
    27 int main()
    28 {
    29     while(cin>>n>>c>>f)
    30     {
    31         for(int i=0;i<c;i++)
    32             scanf("%d%d",&s[i].score,&s[i].aid);
    33         int sum=0;
    34         int num=n/2;
    35         sort(s,s+c,cmp);
    36         priority_queue<int> que1;
    37         for(int i=0;i<c;i++){
    38             if(que1.size()==num)
    39                 dp1[i]=sum;
    40             else
    41                 dp1[i]=inf;
    42             sum+=s[i].aid;
    43             que1.push(s[i].aid);
    44             if(que1.size()>num){
    45                 int t=que1.top();
    46                 que1.pop();
    47                 sum=sum-t;
    48             }
    49         }
    50             int ans=0;
    51             priority_queue<int> que2;
    52             for(int i=c-1;i>=0;i--){
    53                 if(que2.size()==num)
    54                     dp2[i]=ans;
    55                 else
    56                     dp2[i]=inf;
    57                 ans+=s[i].aid;
    58                 que2.push(s[i].aid);
    59                 if(que2.size()>num){
    60                 int h=que2.top();
    61                 que2.pop();
    62                 ans=ans-h;
    63                 }
    64         }
    65         int k=-1;
    66         for(int i=0;i<c;i++){
    67             if(dp1[i]+dp2[i]+s[i].aid<=f)
    68             k=s[i].score;
    69         }
    70         cout<<k<<endl;
    71     }
    72     return 0;
    73 }
    View Code
  • 相关阅读:
    django 开发Broken pipe from ('127.0.0.1', 58078)问题解决
    cocos2d-js中jsc逆向为js攻略
    ECshop 怎样修改商品详细页的“浏览次数”
    ecshop 加广告出现广告位的宽度值必须在1到1024之间
    Nginx 301重定向的配置
    ECSHOP安装百度编辑UEditor教程
    Ecshop商品详情页显示当前会员等级价格
    ECSHOP始终显示全部分类方法
    vps主机修改系统远程端口号/添加防火墙
    ecshop利用.htaccess实现301重定向的方法
  • 原文地址:https://www.cnblogs.com/wolf940509/p/5467499.html
Copyright © 2020-2023  润新知