noi.ac #30 思维
\(des\)
给定升序数组 \(A, B\)
对于任意两个集合 \(a, b\) 分别是 \(A, B\) 的子集,总价值为较小的集合的和,
总代价为 \((|a| + |b|) \times w\)
最大化的 总价值 - 总代价
\(sol\)
显然,在升序并且每个元素的代价都相同的条件下集合 \(a\) 一定是集合 \(A\) 的
某个后缀,集合 \(b\) 同理,因为代价一定的话选价值更高的结果显然更优
这样的话,枚举集合 \(A, B\) 的每个后缀作为总价值,在另一个集合中找到相应
的最后一个总价值比其大的后缀,统计答案并取更优解
\(code\)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
#define LL long long
LL A[N], B[N];
LL n, w;
LL sum1[N], sum2[N];
#define Rep(i, a, b) for(int i = a; i <= b; i ++)
int main() {
	cin >> n >> w;
	Rep(i, 1, n) cin >> A[i];
	Rep(i, 1, n) cin >> B[i];
	reverse(A + 1, A + n + 1);
	reverse(B + 1, B + n + 1);
	Rep(i, 1, n) sum1[i] = sum1[i - 1] + A[i];
	Rep(i, 1, n) sum2[i] = sum2[i - 1] + B[i];
	LL Answer = 0;
	int to = 0;
	Rep(i, 1, n) {
		while(to != n && sum2[to] < sum1[i]) to ++;
		if(sum1[i] > sum2[to]) break;
		Answer = max(Answer, sum1[i] - w * (i + to));
	}
	to = 0;
	Rep(i, 1, n) {
		while(to != n && sum1[to] < sum2[i]) to ++;
		if(sum2[i] > sum1[to]) break;
		Answer = max(Answer, sum2[i] - w * (i + to));
	}
	cout << Answer;
	return 0;
}
												
											noi.ac #30 思维的更多相关文章
- [NOI.AC#30]candy 贪心
		
链接 一个直观的想法是,枚举最小的是谁,然后二分找到另外一个序列对应位置更新答案,复杂度 \(O(NlogN)\) 实际上不需要二分,因为每次当最大的变大之后,原来不行的最小值现在也一定不行,指针移动 ...
 - NOI.AC 32 Sort——分治
		
题目:http://noi.ac/problem/32 从全是0和1的情况入手,可以像线段树一样分治下去,回到本层的时候就是左半部的右边是1,右半部的左边是0,把这两部分换一下就行.代价和时间一样是n ...
 - # NOI.AC省选赛 第五场T1 子集,与&最大值
		
NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...
 - NOI.ac #31 MST DP、哈希
		
题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...
 - NOI.AC NOIP模拟赛 第五场 游记
		
NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...
 - NOI.AC NOIP模拟赛 第六场 游记
		
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
 - NOI.AC NOIP模拟赛 第二场 补记
		
NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...
 - NOI.AC NOIP模拟赛 第一场 补记
		
NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...
 - NOI.AC NOIP模拟赛 第四场 补记
		
NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...
 
随机推荐
- 在内网中 vue项目添加ECharts图表插件
			
原文地址:https://www.cnblogs.com/aknife/p/11753854.html 最近项目中要使用到图表 但是项目在内网中无法直接使用命令安装 然后我在外网中弄个vue的项目(随 ...
 - tomcat线程池调优
			
之前项目一直在tomcat下开发,后来在上线之前,需要进行性能安全测试,可是测试的同事反应,登陆口线程并发一多的时候,系统立马就没法登陆了. 中间件是tomcat6. tomcat的日志总是简洁的很 ...
 - Windows中的消息与消息队列
			
消息 在Windows中,消自由MSG结构体表示 typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lPar ...
 - 湖南师范大学计算机基础课网络教学平台 版本 V2.0(2017.9.18)
			
湖南师范大学计算机基础课网络教学平台 版本 V2.0(2017.9.18) 开发环境: 开发工具:VS2013,数据库:Sqlserver2012 开发语言:Asp.net MVC5 ,界面UI:jq ...
 - 关于素数表-C++
			
废话不多说,先贴代码: #include <iostream> using namespace std; bool is_prime(int n) { || n == ) return f ...
 - centOS学习part6:安装oracle 11g
			
0 大家好.上一章(http://www.cnblogs.com/souvenir/p/3881484.html)我们对oracle在centOS下的安装进行了各项环境准备,本章我们将正式进行oral ...
 - javascript  四舍五入;  js 四舍五入
			
方法 Math.round round() 方法可把一个数字舍入为最接近的整数. 对于 0.5,该方法将进行上舍入. 例如,3.5 将舍入为 4,而 -3.5 将舍入为 -3. Math.round( ...
 - js 删除 数组中某个元素(转载)
			
来源:https://www.jb51.net/article/134312.htm js删除数组中某一项或几项的几种方法 https://www.jb51.net/article/154737.ht ...
 - 开发环境wamp3.06 + Zend studio 12 调试配置
			
<?php $fileName = "php大师.test.php"; //补充程序,显示文件名(不包括扩展名) $start = strrpos($fileName, &q ...
 - Virtualization and Performance: Understanding VM Exits
			
翻译自:Virtualization and Performance: Understanding VM Exits 出于对特定指令 或 特定事件(eg. page fault)的响应而导致的VM ...