正题

题目链接:https://www.luogu.com.cn/problem/CF618F


题目大意

给出大小为nnn,值域为[1,n][1,n][1,n]的两个可重集合A,BA,BA,B

需要你对它们各求出可重子集使得两个子集中的数字和相等

输出方案。

1≤n≤1061\leq n\le 10^61≤n≤106


解题思路

这个值域范围就很提示性的往鸽笼原理方面考虑。

此题的结论就是一定有连续子序列的解。

先搞一个前缀和A,BA,BA,B,假设An≤BnA_n\leq B_nAn​≤Bn​。
现在我们要求两个l,rl,rl,r满足
Ar1−Al1=Br2−Bl2A_{r_1}-A_{l_1}=B_{r_2}-B_{l_2}Ar1​​−Al1​​=Br2​​−Bl2​​
⇒Ar1−Br2=Al1−Bl2\Rightarrow A_{r_1}-B_{r_2}=A_{l_1}-B_{l_2}⇒Ar1​​−Br2​​=Al1​​−Bl2​​

现在问题就变为了求两个相同的Ax−ByA_x-B_yAx​−By​.

对于每个AxA_xAx​(x∈[0,n]x\in[0,n]x∈[0,n]),求出一个最大的yyy使得By≤AxB_y\leq A_xBy​≤Ax​
那么显然有Ax−By∈[0,n−1]A_x-B_y\in[0,n-1]Ax​−By​∈[0,n−1],也就是Ax−ByA_x-B_yAx​−By​一共只有nnn种取值,而我们有n+1n+1n+1个,所以至少有两个相同的。

开两个桶记录一下出现位置就好了。

时间复杂度O(n)O(n)O(n)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e6+10;
ll n,a[N],b[N],la[N],lb[N];
signed main()
{scanf("%lld",&n);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]),a[i]+=a[i-1];for(ll i=1;i<=n;i++)scanf("%lld",&b[i]),b[i]+=b[i-1];bool f=0;if(a[n]>b[n]){for(ll i=1;i<=n;i++)swap(a[i],b[i]);f=1;}ll ala,alb,ara,arb;for(ll i=0,j=0;i<=n;i++){while(b[j]<=a[i])j++;j--;if(la[a[i]-b[j]]){ala=la[a[i]-b[j]];alb=lb[a[i]-b[j]];ara=i;arb=j;}la[a[i]-b[j]]=i+1;lb[a[i]-b[j]]=j+1;}if(f)swap(ala,alb),swap(ara,arb);printf("%lld\n",ara-ala+1);for(ll i=ala;i<=ara;i++)printf("%lld ",i);printf("\n%lld\n",arb-alb+1);for(ll i=alb;i<=arb;i++)printf("%lld ",i);return 0;
}

CF618F-Double Knapsack【结论】相关推荐

  1. CF618F Double Knapsack 构造、抽屉原理

    传送门 首先,选取子集的限制太宽了,子集似乎只能枚举,不是很好做.考虑加强限制条件:将"选取子集"的限制变为"选取子序列"的限制.在接下来的讨论中我们将会知道: ...

  2. C++ sizeof 使用规则及陷阱分析【转】

    目录 一.什么是sizeof 二.sizeof用法 三.基本数据类型的sizeof 四.复杂数据类型的sizeof及其数据对齐问题 五.class类型的sizeof特别探讨 六.总结 一.什么是siz ...

  3. java long类型转string_JavaSE的学习——数据类型

    数据类型分为基本数据类型和引用数据类型两大类 在下面数据类型的介绍中只会介绍8种基本数据类型和引用数据类型中的类类型中的一个类String 基本数据类型 1. 计算机中的存储单位 8bit = 1by ...

  4. java窗口弹出的位置_java的窗口弹出和动手动脑

    窗口弹出 //两数相加窗口弹出 张雪晴 2015/10/3 import javax.swing.JOptionPane; public class Addition { public static ...

  5. 2016区域赛前冲刺训练

    UPD 2016.10.23 shift-and (2题) Codeforces 训练 现在已经完成了: 191 [Codeforces Round #377] (6/6) Div 2 A Buy a ...

  6. 基本数据类型和它们之间的运算规则

    基本数据类型 一.整型变量.(byte一个字节.char两字节.short两字节.int四字节) 1.输出超过范围的数据类型编译不通过. 例子:byte范围: -128 ~ 127 而 byte b2 ...

  7. 01背包问题分支限界java_分支限界法-01背包问题

    1.分支限界法介绍 分支限界法类似于回溯法,也是在问题的解空间上搜索问题解的算法.一般情况下,分支限界法与回溯法的求解目标不同.回溯法的求解目标是找出解空间中满足约束条件的所有解:而分支限界法的求解目 ...

  8. Java 中的 NaN

    概述 简单来说可以认为 NaN 是一个数字数据类型变量值,这个类型变量被定义为 这不是一个数字. 在这篇文章中,我们对 Java 中的 NaN 进行一些简单的描述和说明和在那些操作的过程中可以尝试这个 ...

  9. 0-1背包、部分背包和完全背包模板

    一:0-1背包 当数据是实数时,乘个数使它变成整数.如3.22->3.22*100=322; 理解模板: #include<cstdio> #include<iostream& ...

  10. 3.3 数据成员的存取

    本节的讨论针对两种情况的效率进行分析: class X {public://数据成员memstatic double mem; };X orgin; X * pt = &orgin;//考虑以 ...

最新文章

  1. 第十三届计算机语言学大会,第十三届全国语音学学术会议(PCC 2018) 会议通知第3号...
  2. 已解决:CentOS 7安装Docker Compose
  3. 新手入门机器学习十大算法
  4. jq fileupload 设置最大文件大小5m_我猜你并不会设置“分辨率”
  5. 【华为大咖分享】4.反脆弱,高效能组织的能力构建(后附PPT下载地址)
  6. java写龟兔赛跑_有关JAVA编写龟兔赛跑的游戏的问题。求助……
  7. ios下fixed回复框bug的解决方案
  8. 俺的房子内有空调冬暖夏凉,房间宽敞气派非凡
  9. Java7 和 C# 2.0
  10. 一篇文章搞定支付宝网页支付!
  11. 下次激活策略10_陈金凌:年流量1-10万独立站关键词策略案例(1)
  12. 望海潮·无处闻三年六月歌
  13. 数字通信系统中的频带利用率
  14. 【计算机视觉】Lecture 11:LoG和DoG滤波算子
  15. UDT(【CVPR2019】Unsupervised Deep Tracking无监督目标跟踪)
  16. c语言的所有头文件,C语言所有头文件.doc
  17. pdf转jpg在线转换免费
  18. 【优化控制】基于遗传算法实现优化LQR控制器含Matlab源码
  19. 2020年山东大学数字电路906真题
  20. 抓住机会,敢于尝试——第一次讲解ppt

热门文章

  1. jmeter聚个报告怎么看qps_Jmeter 使用笔记之 html 报告扩展(一)
  2. lcd屏幕抖动_电视屏幕面板大科普!买电视之前必看!
  3. Java将mysql输出csv_使用Java将大量数据从数据库导出到.csv时出...
  4. php 画图 坐标,说说PHP作图(一)_php
  5. html插入图片和文字,HTML第三课文字图片插入
  6. Java项目几个月能完成_c#项目转JAVA,第5个月,基本完成
  7. 机器学习之格式变化——reshape(-1,1)
  8. 解决浏览器存储问题,不得不了解的cookie,localStorage和sessionStorage
  9. java numberformat异常_Java NumberFormat格式化float类型的bug
  10. [Spring5]IOC容器_Bean管理注解方式_完全注解开发