交集
来源:互联网 发布:sdr软件无线电 飞行 编辑:程序博客网 时间:2024/06/07 12:44
问题 P: 交集
时间限制: 1 Sec 内存限制: 128 MB
提交: 5299 解决: 1171
[提交][状态][讨论版]
题目描述
有两个相等长度的正整数序列A和B,都是有序的(递增排序),同时一个序列中没有重复元素,现在需要求这两个序列的交――序列C,同时打印输出。
输入
输入由多组测试用例组成。
每个测试用例一共有2*n+1行,第一行输入为数列的长度n,然后下面2~n+1行,依次输入序列A中的数。n+2~2*n+1行,依次输入序列B中的数。其中 1 <= n <= 50000 , 序列中每个数大小不会超过1000000。
当程序输入n为0时表示结束。
输出
每个测试用例输出一行,先输出序列C的长度,然后依次输出C中的整数,两个数之间间隔一个空格。注意行末不要出现空格。C中的整数递增排序。
样例输入
5
1
2
5
6
7
1
2
4
6
9
0
样例输出
3 1 2 6
#include<stdio.h>#define maxsize 1000000typedef struct{ int *elem; int length;}sqlist;void initlist(sqlist &L){ L.elem=new int[maxsize]; L.length=0;}void creatlist(sqlist &L,int n){ int j=0,i,k; for(k=0;k<2*n;k++) { scanf("%d",&i); L.elem[j++]=i; }}int main(){ int n; int i,j,k=0; sqlist L; initlist(L); int b[1000]; while(~scanf("%d",&n)&&n) { if(n!=1) { creatlist(L,n); i=0,j=n; k=0; while(i<=n-1&&j<=2*n-1) { if(L.elem[i]==L.elem[j]) {b[k++]=L.elem[i];i++,j++;} else { if(L.elem[i]<L.elem[j]) i++; else j++; } } printf("%d",k); if(k) { printf(" "); for(i=0;i<k-1;i++) printf("%d ",b[i]); printf("%d\n",b[i]); } else printf("\n"); } else { int i1,i2; scanf("%d",&i1); scanf("%d",&i2); if(i1==i2) printf("1 %d\n",i1); else printf("0\n"); } }}
阅读全文
0 0
- 交集
- 三角形交集
- 表交集
- 求交集
- 单链表求交集
- 交集问题
- 交集选择器
- 交集选择器
- 求交集
- mysql不支持Intersect交集,改版取交集
- 两个时间段取得交集
- 倒排表交集的计算
- 从此再无交集
- oracle 存储过程 交集
- set求交集
- 交集N算法
- 投影交集overlapping仿真
- 交集并集
- 后缀表达式求值
- Oracle第四章单行函数习题答案
- 使用okhttp下载一个apk并安装
- Java 垂直等腰直角三角形
- STM8L15X液晶初始化程序
- 交集
- 【JavaScript避免重命名的方法】
- 成绩排序
- jQuery之事件与动画总结
- jq锚点联动
- Sublime text 3配置Lua环境
- jQuery打字机小练习
- CSS之background-position属性
- jQuery选项卡小练习