正题

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


题目大意

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

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

输出方案。

\(1\leq n\le 10^6\)


解题思路

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

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

先搞一个前缀和\(A,B\),假设\(A_n\leq B_n\)。

现在我们要求两个\(l,r\)满足

\[A_{r_1}-A_{l_1}=B_{r_2}-B_{l_2}
\]
\[\Rightarrow A_{r_1}-B_{r_2}=A_{l_1}-B_{l_2}
\]

现在问题就变为了求两个相同的\(A_x-B_y\).

对于每个\(A_x\)(\(x\in[0,n]\)),求出一个最大的\(y\)使得\(B_y\leq A_x\)

那么显然有\(A_x-B_y\in[0,n-1]\),也就是\(A_x-B_y\)一共只有\(n\)种取值,而我们有\(n+1\)个,所以至少有两个相同的。

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

时间复杂度\(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;
}

最新文章

  1. int[] convert byte[]
  2. MVC中的Html.Partial和Html.RenderPartial
  3. yield和python(如何生成斐波那契數列)
  4. 安装Ecshop首页出现报错:Only variables should be passed by referen
  5. Eclipse中SVN的安装步骤(两种)和用法
  6. Colossal Fibonacci Numbers(巨大的斐波那契数)UVA 11582
  7. 【VLFeat】使用matlab版本计算HOG
  8. 月赛-Crackhash
  9. mysql1130远程连接没有权限解决方法
  10. Hihocode 1015 KMP算法
  11. C语言——第三次作业
  12. 2.ansible-playbook基本参数
  13. MacOS安装Go2Shell
  14. 手动添加jar包到本地maven仓库(已测)ok
  15. 原创:XXX公司-基于SAP的库存管理系统解决方案
  16. 关于Windows下的批处理如何模拟Sleep
  17. centos 升级python26到python27
  18. DispatcherServlet的初始化(二)
  19. [LeetCode 题解]: Remove Duplicates from Sorted List
  20. SaaS模式实现架构

热门文章

  1. 【java虚拟机】内存溢出解决思路
  2. ProjectEuler 004题
  3. Go: 复合数据类型slice
  4. Go错误处理正确姿势
  5. IDEA常用设置及推荐插件
  6. Linux&#183;命令收藏
  7. eclipse 将本地插件引用(多种方法)
  8. RabbitMQ-进阶
  9. Python之uiautomation模块-获取CMD窗口中所打印的文字信息
  10. P1721 [NOI2016] 国王饮水记 题解