博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CodeForces - 618F Double Knapsack
阅读量:4340 次
发布时间:2019-06-07

本文共 2588 字,大约阅读时间需要 8 分钟。

Discription

You are given two multisets A and B. Each multiset has exactly n integers each between 1 and n inclusive. Multisets may contain multiple copies of the same number.

You would like to find a nonempty subset of A and a nonempty subset of B such that the sum of elements in these subsets are equal. Subsets are also multisets, i.e. they can contain elements with equal values.

If no solution exists, print  - 1. Otherwise, print the indices of elements in any such subsets of A and B that have the same sum.

Input

The first line of the input contains a single integer n (1 ≤ n ≤ 1 000 000) — the size of both multisets.

The second line contains n integers, denoting the elements of A. Each element will be between 1 and n inclusive.

The third line contains n integers, denoting the elements of B. Each element will be between 1 and n inclusive.

Output

If there is no solution, print a single integer  - 1. Otherwise, your solution should be printed on four lines.

The first line should contain a single integer ka, the size of the corresponding subset of A. The second line should contain ka distinct integers, the indices of the subset of A.

The third line should contain a single integer kb, the size of the corresponding subset of B. The fourth line should contain kb distinct integers, the indices of the subset of B.

Elements in both sets are numbered from 1 to n. If there are multiple possible solutions, print any of them.

Examples

Input
10 10 10 10 10 10 10 10 10 10 10 10 9 8 7 6 5 4 3 2 1
Output
1 2 3 5 8 10
Input
5 4 4 3 3 3 2 2 2 2 5
Output
2 2 3 2 3 5     一道神构造。     设sa[]为a[]的前缀和,sb[]为b的前缀和,对于每个0<=i<=n,我们找到一个最大的使得sb[j]<=sa[i]的j,这样每个sa[i]-sb[j]都是[0,n-1]的整数了(因为如果sa[i]-sb[j]>=n的话,j可以继续后移(a[],b[]中元素都<=n))     所以至少会有一对 i和i'满足 sa[i]-sb[j] == sa[i']-sb[j'],直接输出就行了。。
#include
#define ll long longusing namespace std;const int maxn=1000005;ll a[maxn],b[maxn];int px[maxn],py[maxn],n;inline int read(){ int x=0; char ch=getchar(); for(;!isdigit(ch);ch=getchar()); for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0'; return x;}void W(int x){ if(x>=10) W(x/10); putchar(x%10+'0');}int main(){ n=read(); for(int i=1;i<=n;i++) a[i]=read(),a[i]+=a[i-1]; for(int i=1;i<=n;i++) b[i]=read(),b[i]+=b[i-1]; for(int i=0,j=0,D;i<=n;i++){ for(;j
<=a[i];j++); D=a[i]-b[j]; if(px[D]){ W(i-px[D]+1),puts(""); for(int o=px[D];o<=i;o++) W(o),putchar(' '); puts(""),W(j-py[D]+1),puts(""); for(int o=py[D];o<=j;o++) W(o),putchar(' '); return 0; } px[D]=i+1,py[D]=j+1; } return 0;}

  

 

转载于:https://www.cnblogs.com/JYYHH/p/8927301.html

你可能感兴趣的文章
GitHub 常用命令使用介绍(新同学入门)
查看>>
16-镜像命名的最佳实践
查看>>
【概率论】5-6:正态分布(The Normal Distributions Part III)
查看>>
课后作业-阅读任务-阅读提问-4
查看>>
The City of Song
查看>>
前端关于居中问题
查看>>
关于JVM的垃圾回收(GC) 这可能是你想了解的
查看>>
转:AFNetworking 与 UIKit+AFNetworking 详解
查看>>
回顾冒泡排序
查看>>
Ajax
查看>>
LeetCode 235 Lowest Common Ancestor of a Binary Search Tree
查看>>
SpringBoot webSocket
查看>>
C# DateTime变量不能赋null值
查看>>
[zoj]3576 Count the Length
查看>>
yii 表单小部件使用
查看>>
关于java泛型1
查看>>
solr教程,值得刚接触搜索开发人员一看
查看>>
面试笔试-脚本-1:使用shell脚本输出登录次数最多的用户
查看>>
Cordys BOP 4平台开发入门实战演练——Webservices开发(0基础)
查看>>
《Pro Android Graphics》读第三季度票据
查看>>