zoukankan      html  css  js  c++  java
  • SZU2

    CF:Problem 425A

    区间暴力,枚举区间。交换选定区间最小值和剩余区间最大值k次。

    其实等同于将剩余区间最大k个加到选定区间里,然后排序

    #include <iostream>
    #include <string>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <cctype>
    #include <vector>
    #include <iterator>
    #include <set>
    #include <map>
    #include <sstream>
    using namespace std;
    
    #define mem(a,b) memset(a,b,sizeof(a))
    #define pf printf
    #define sf scanf
    #define spf sprintf
    #define pb push_back
    #define debug printf("!
    ")
    #define INF 10000
    #define MAXN 5010
    #define MAX(a,b) a>b?a:b
    #define blank pf("
    ")
    #define LL long long
    #define ALL(x) x.begin(),x.end()
    #define INS(x) inserter(x,x.begin())
    #define pqueue priority_queue
    
    int a[205];
    int n,k;
    
    int main()
    {
         int i,j,m;
         while(sf("%d%d",&n,&k)==2)
         {
              for(i =0;i<n;i++)
                   sf("%d",&a[i]);
    
              int mx=-1000;
    
              for(i =0;i<n;i++)
              {
                   for(j =i;j<n;j++)
                   {
                        vector<int> p,q;
                        for(m=0;m<n;m++)
                        {
                             if(m<i||m>j) p.pb(a[m]);//p剩余区间
                             else q.pb(a[m]);//q选定区间
                        }
                        sort(p.rbegin(),p.rend());//rbegin反向迭代器
                        for(m=0;m<k&&m<p.size();m++)
                             q.pb(p[m]);
                        sort(q.rbegin(),q.rend());
                        int sum=0;
                        for(m=0;m<=j-i;m++) sum+=q[m];
                        if(sum>mx) mx=sum;
                   }
              }
    
              pf("%d
    ",mx);
         }
    }

    CodeForces 363D

    这题其实是二分法。需要买最多的车,判断能不能买k辆车的话,一定是钱最多的k个人,买最便宜的k辆车,然后二分查找找出最大k

    第二条件即花钱最少其实可以算出来,最关键还是k的大小

    #include <iostream>
    #include <string>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <cctype>
    #include <vector>
    #include <iterator>
    #include <set>
    #include <map>
    #include <sstream>
    using namespace std;
    
    #define mem(a,b) memset(a,b,sizeof(a))
    #define pf printf
    #define sf scanf
    #define spf sprintf
    #define pb push_back
    #define debug printf("!
    ")
    #define INF 10000
    #define MAXN 5010
    #define MAX(a,b) a>b?a:b
    #define blank pf("
    ")
    #define LL long long
    #define ALL(x) x.begin(),x.end()
    #define INS(x) inserter(x,x.begin())
    #define pqueue priority_queue
    
    int b[100005],p[100005];
    int n,m,a;
    
    bool ok(int k)
    {
         int aa = a;
         int d=n-k;
         for(int i=0;i<k;i++)
         {
              if(b[i+d]<p[i])
                   aa-=(p[i]-b[i+d]);
              if(aa<0) return false;
         }
         return true;
    }
    
    int main()
    {
         int i,j;
         while(sf("%d%d%d",&n,&m,&a)==3)
         {
              for(i=0;i<n;i++) sf("%d",&b[i]);
              for(i=0;i<m;i++) sf("%d",&p[i]);
              sort(b,b+n);
              sort(p,p+m);
              int l=0,r=min(n,m),mid;
              while(l<=r)
              {
                   mid = (l+r)>>1;
                   if(ok(mid)) l=mid+1;
                   else r=mid-1;
              }
              int s =0;
              for(i=0;i<l-1;i++)
                   s+=p[i];
              pf("%d %d
    ",l-1,s-a);
         }
    }
  • 相关阅读:
    兼容IE678浏览器的html5标签的几个方案
    CommonJS和AMD/CMD
    axios的使用
    自己写表单校验插件
    表单校验
    JS打开新窗口的2种方式
    mac 上使用移动硬盘
    Boostrap
    Web.config详解
    DataTable
  • 原文地址:https://www.cnblogs.com/qlky/p/5271398.html
Copyright © 2011-2022 走看看