Codeforces.618F.Double Knapsack(构造 鸽巢原理)
\(Description\)
给定两个大小为\(n\)的可重集合\(A,B\),集合中的元素都在\([1,n]\)内。你需要从这两个集合中各选一个非空子集,使它们的和相等。输出方案。
\(n\leq10^6\)。
\(Solution\)
求子集是假的...对两个集合按任意顺序求个前缀和,记为\(SA_i,SB_i\)。不妨假设\(SA_n\leq SB_n\)。
那么能发现,对于每个\(SA_i\ (0\leq i\leq n)\),找出最大的\(SB_j\leq SA_i\)的\(j\),\(SA_i-SB_j\)的取值范围是\([0,n-1]\)(如果\(\geq n\)则可以移动\(j\)),只有\(n\)种。而\(i\)的取值有\(n+1\)种。由鸽巢原理,那么一定存在一对\(i,i'\ (i\neq i')\),使得\(SA_i-SB_j=SA_{i'}-SB_{j'}\)。因为元素大于\(0\),所以\(j\neq j'\)。
那么有\(SA_i-SA_{i'}=SB_j-SB_{j'}\),就可以得到答案啦。
//421ms 23800KB
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
#define MAXIN 500000
//#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=1e6+5;
LL sa[N],sb[N];
char IN[MAXIN],*SS=IN,*TT=IN;
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-48,c=gc());
return now;
}
void Solve(const int n,LL *sa,LL *sb,int &la,int &ra,int &lb,int &rb)
{
static int vis[N],vis2[N];
sb[n+1]=1ll<<60;
memset(vis,0xff,sizeof vis);
for(int i=0,j=0,v; i<=n; ++i)
{
while(sb[j+1]<=sa[i]) ++j;
if(~vis[v=sa[i]-sb[j]]) {la=vis[v], ra=i, lb=vis2[v], rb=j; break;}
vis[v]=i, vis2[v]=j;
}
}
int main()
{
int n=read();
for(int i=1; i<=n; ++i) sa[i]=sa[i-1]+read();
for(int i=1; i<=n; ++i) sb[i]=sb[i-1]+read();
int la,ra,lb,rb;
if(sa[n]>sb[n]) Solve(n,sb,sa,lb,rb,la,ra);
else Solve(n,sa,sb,la,ra,lb,rb);
printf("%d\n",ra-la);
for(int i=la+1; i<=ra; ++i) printf("%d ",i); putchar('\n');
printf("%d\n",rb-lb);
for(int i=lb+1; i<=rb; ++i) printf("%d ",i); putchar('\n');
return 0;
}
Codeforces.618F.Double Knapsack(构造 鸽巢原理)的更多相关文章
- codeforces 851C Five Dimensional Points(鸽巢原理)
http://codeforces.com/contest/851/problem/C 题意 - 给出 n 个五维空间的点 - 一个点a为 bad 的定义为 存在两点 b, c, 使的<ab, ...
- CF618F Double Knapsack 构造、抽屉原理
传送门 首先,选取子集的限制太宽了,子集似乎只能枚举,不是很好做.考虑加强限制条件:将"选取子集"的限制变为"选取子序列"的限制.在接下来的讨论中我们将会知道: ...
- CodeForces - 618F Double Knapsack
Discription You are given two multisets A and B. Each multiset has exactly n integers each between 1 ...
- Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) F. Double Knapsack 鸽巢原理 构造
F. Double Knapsack 题目连接: http://www.codeforces.com/contest/618/problem/F Description You are given t ...
- Codeforces 1188C DP 鸽巢原理
题意:定义一个序列的beauty值为序列中元素之差绝对值的最小值,现在给你一个数组,问所有长度为k的子序列的beauty值的和是多少? 思路:(官方题解)我们先解决这个问题的子问题:我们可以求出bea ...
- Codeforces Round #648 (Div. 2) E. Maximum Subsequence Value(鸽巢原理)
题目链接:https://codeforces.com/problemset/problem/1365/E 题意 有 $n$ 个元素,定义大小为 $k$ 的集合值为 $\sum2^i$,其中,若集合内 ...
- CodeForces 125D【鸽巢原理】
哇塞?开始的三个数其中两个数一定能确定一个序列.(鸽巢原理) #include <bits/stdc++.h> using namespace std; typedef long long ...
- [BZOJ4722]由乃[鸽巢原理+bitset+倍增]
题意 给定长为 \(n\) 序列 \(a\) ,要求支持两种操作: \(1.\) 询问在一个区间 \([l,r]\) 中,是否能够选出两个交集为空的集合 $ \rm X ,Y$, 使得 \(\sum_ ...
- POJ2356 Find a multiple 抽屉原理(鸽巢原理)
题意:给你N个数,从中取出任意个数的数 使得他们的和 是 N的倍数: 在鸽巢原理的介绍里面,有例题介绍:设a1,a2,a3,……am是正整数的序列,试证明至少存在正数k和l,1<=k<=l ...
随机推荐
- HTML&javaSkcript&CSS&jQuery&ajax(十)
HTML 1.SVG直接嵌入HTML网页 ,SVG 是使用XML描述2D图像的语言,Canvas通过JavaScript来绘制2D <svg xmlns="http://www.w3. ...
- cf581F 依赖背包+临时数组 好题
这题得加个临时数组才能做.. /* 给定一棵树,树节点可以染黑白,要求叶子节点黑白平分 称连接黑白点的边为杂边,求使得杂边最少的染色方 那么设dp[i][j][0|1]表示i子树中有j个叶子节点,i染 ...
- Appium 常用方法总结 (python 版)
1.app后台运行 driver.background_app(5) 2.锁屏 driver.lock(5) 3.隐藏键盘 driver.hide_keyboard() 4.启动一个app或者在当前a ...
- C++ friend友元函数和友元类(转)
一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们来介绍一种例外情 ...
- Left-pad
L1-032 Left-pad (20 分) 根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的 ...
- python—命名规范
文件名全小写,可使用下划线 包应该是简短的.小写的名字.如果下划线可以改善可读性可以加入.如mypackage. 模块与包的规范同.如mymodule. 类总是使用首字母大写单词串.如MyClass. ...
- SQL得到任意一个存储过程的参数列表sp_procedure_params_rowset
SQL得到任意一个存储过程的参数列表sp_procedure_params_rowsetexec sp_procedure_params_rowset 'up_rpt营业收入汇总表' PROCEDUR ...
- [转]android sqlite db-journal文件产生原因及说明 .
http://blog.csdn.net/kaiwii/article/details/8609093 今天在android中将sqlite的数据库文件生成在SD卡上的过程中,发现生成的.db文件的旁 ...
- 【转】PropertyGrid控件中的多级显示
运行效果: 解决方案: MainForm.cs public partial class MainForm : Form { public MainForm() { InitializeCompone ...
- ThemeableBrowser在IOS中按钮图片的使用
1. 首先确保图片的名称为 ***@1x.png, ***@2x.png 或 ***@3x.png iPhone —— iPhone3GS ***@1x.png iPhone —— iPhone6 * ...