SZU2
区间暴力,枚举区间。交换选定区间最小值和剩余区间最大值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("!\n")
#define INF 10000
#define MAXN 5010
#define MAX(a,b) a>b?a:b
#define blank pf("\n")
#define LL long long
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define pqueue priority_queue int a[];
int n,k; int main()
{
int i,j,m;
while(sf("%d%d",&n,&k)==)
{
for(i =;i<n;i++)
sf("%d",&a[i]); int mx=-; for(i =;i<n;i++)
{
for(j =i;j<n;j++)
{
vector<int> p,q;
for(m=;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=;m<k&&m<p.size();m++)
q.pb(p[m]);
sort(q.rbegin(),q.rend());
int sum=;
for(m=;m<=j-i;m++) sum+=q[m];
if(sum>mx) mx=sum;
}
} pf("%d\n",mx);
}
}
这题其实是二分法。需要买最多的车,判断能不能买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("!\n")
#define INF 10000
#define MAXN 5010
#define MAX(a,b) a>b?a:b
#define blank pf("\n")
#define LL long long
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define pqueue priority_queue int b[],p[];
int n,m,a; bool ok(int k)
{
int aa = a;
int d=n-k;
for(int i=;i<k;i++)
{
if(b[i+d]<p[i])
aa-=(p[i]-b[i+d]);
if(aa<) return false;
}
return true;
} int main()
{
int i,j;
while(sf("%d%d%d",&n,&m,&a)==)
{
for(i=;i<n;i++) sf("%d",&b[i]);
for(i=;i<m;i++) sf("%d",&p[i]);
sort(b,b+n);
sort(p,p+m);
int l=,r=min(n,m),mid;
while(l<=r)
{
mid = (l+r)>>;
if(ok(mid)) l=mid+;
else r=mid-;
}
int s =;
for(i=;i<l-;i++)
s+=p[i];
pf("%d %d\n",l-,s-a);
}
}
SZU2的更多相关文章
- Qt开发初步,循序渐进,preRequest for 蓝图逆袭
1,使用Qt面向对象类继承创建第一个窗口主部件,使用setMinimumSize(),setMaximumSize()配置主部件窗口是否能够resize;
- 数据结构——表(list)
#include <iostream> #include <list> using namespace std; 标准类的存储方式为双向循环链表 list类 class lis ...
- [Android系列—] 1. Android 开发环境搭建与Hello World
前言 開始之前先熟悉几个名词: SDK -- Software Development Kit, 软件开发工具包.这个词并不陌生, JDK,就是Jave Development Kit,相同对于And ...
随机推荐
- luoguP3359 改造异或树
https://www.luogu.org/problemnew/show/P3359 因为 a ^ b ^ b = a,所以我们预处理 1 到所有点的距离,将删边的操作反过来变成加边,对于每一个联通 ...
- sap server笔记
system 就是sap hana database,如果一个system有多个instance,则必须分散到不同的host中,每个system有唯一的sid. hello各位,jackie建议我们去 ...
- leetcode-796-Rotate String
题目描述: We are given two strings, A and B. A shift on A consists of taking string A and moving the lef ...
- CSS 两个行内块元素,宽度相加刚好等于父盒子容器的元素,但第二个元素掉在第二行解决办法
我们可以发现:两个行内块元素,宽度相加刚好等于父盒子容器的元素,但第二个元素掉在第二行,这是什么问题呢? 我们先来看一下效果: <!DOCTYPE html> <html lang= ...
- SyntaxError: Non-UTF-8 code starting with '\xb6' in file XX.py
导致出错的根源就是编码问题. 解决方案是: 在程序最上面加上: # coding=gbk
- HihoCoder - 1513 bitset处理五维偏序
题意:给出\(n<3e4\)个有序组\((a,b,c,d,e)\),求对第\(i\)个有序组有多少个\(j\)满足\((a_j<a_i,b_j<b_i,c_j<c_i,d_j& ...
- ABP与多租户
ABP简介 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程 ...
- python创建目录并更改权限的代码
如下代码段是关于python创建目录并更改权限的代码. import os os.mkdir("foo", 0666)
- 移动APP的用户体验测试
经常被问到用户体验测试,什么是用户体验测试,用户体验测试要关注的都有哪些呢,现在为大家来罗列一下: 1.横竖屏测试 在移动设备上做用户体验测试,最容易想到的就是对APP做横竖屏的测试来观察APP的显示 ...
- vue 路由更新页面视图未更新问题
最近项目做面包屑的时候遇到一个问题就是路由变化的时候页面视图并没有发生变化,后来上网查,发现是vue-router的特性导致的. vue-router的切换不同于传统的页面的切换.路由之间的切换,其实 ...