ALGO-10_蓝桥杯_算法训练_集合运算(排序)
问题描述
给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
输入格式
第一行为一个整数n,表示集合A中的元素个数。
第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。
第三行为一个整数m,表示集合B中的元素个数。
第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。
集合中的所有元素均为int范围内的整数,n、m<=。
输出格式
第一行按从小到大的顺序输出A、B交集中的所有元素。
第二行按从小到大的顺序输出A、B并集中的所有元素。
第三行按从小到大的顺序输出B在A中的余集中的所有元素。
样例输入 样例输出 样例输入 样例输出
记:
一开始想用桶排序,结果发现在后面的测试数据中,既有大数据,也有负数
故改为正常数组存储,排序,但仍旧加入桶排序中的加点,便于输出题目所要的
AC代码:
#include <stdio.h>
#define LEN 2500 int n,m;
long long arr[LEN][] = {};/*0->存储数据,1->存储加点*/ void sort_q(int x,int y,long long tmp[LEN][])
{
int i = x , j = y;
long long k[];
k[] = tmp[x][];
k[] = tmp[x][];
if (i < j)
{
while (i < j)
{
while (i < j && k[] < tmp[j][])
j --;
if (i < j)
{
tmp[i][] = tmp[j][];
tmp[i][] = tmp[j][];
i ++;
}
while (i < j && k[] > tmp[i][])
i ++;
if (i < j)
{
tmp[j][] = tmp[i][];
tmp[j][] = tmp[i][];
j --;
}
}
tmp[i][] = k[];
tmp[i][] = k[];
sort_q(x,i-,tmp);
sort_q(i+,y,tmp);
}
return ;
} void init(void)
{
int flag;
int i,j;
long long k; scanf("%d",&n);
for (i = ; i <= n ; i ++)
{
scanf("%lld",&k);
arr[i][] = k;
arr[i][] += ;
} scanf("%d",&m);
for (i = n+ ; i <= n+m ; i ++)
{
scanf("%lld",&k);
flag = ;
for (j = ; j <= n ; j ++)
{
if (arr[j][] == k)
{
arr[j][] += ;
flag = ;
break;
}
}
if (flag)
{
arr[i][] = k;
arr[i][] += ;
}
}
sort_q(,i,arr); /*快排*/
return ;
} void print()
{
int i;
for (i = ; i <= LEN ; i ++)
{
if (arr[i][] >= )
{
printf("%lld ",arr[i][]);/*输出AB交集*/
}
}
printf("\n"); for (i = ; i <= LEN ; i ++)
{
if (arr[i][] != )
{
printf("%lld ",arr[i][]);/*输出AB并集*/
}
}
printf("\n"); for (i = ; i <= LEN ; i ++)
{
if (arr[i][] == )
{
printf("%lld ",arr[i][]);/*输出B在A中的余集*/
}
} return ;
} int main(void)
{
init();
print();
return ;
}
ALGO-10_蓝桥杯_算法训练_集合运算(排序)的更多相关文章
- 蓝桥杯_算法训练_ALGO10_集合运算
这个题实际上思路是比较简单的,但是需要注意细节问题. 思路:读入数组之后进行排序,然后再求交.并.补集. 首先排序:(使用的是冒泡排序) #include<iostream> using ...
- [蓝桥杯]ALGO-20.算法训练_求先序排列
问题描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=). 输入格式 两行,每行一个字符串,分别表示中序和后序排列 输出格式 一个字符串,表示所求 ...
- [蓝桥杯]ALGO-16.算法训练_进制转换
问题描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*102+2*101+3*100这样 ...
- [蓝桥杯]ALGO-15.算法训练_旅行家的预算
问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...
- [蓝桥杯]ALGO-124.算法训练_数字三角形
问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●<三角形行数≤: ●三角 ...
- [蓝桥杯]ALGO-122.算法训练_未名湖边的烦恼
问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个.现在 ...
- [蓝桥杯]ALGO-116.算法训练_最大的算式
问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号 ...
- [蓝桥杯]ALGO-101.算法训练_图形显示
问题描述 编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数): * * * * * * * * * * * * * * * 题目描述 代码如下: #include < ...
- [蓝桥杯]ALGO-97.算法训练_排序
题目描述: 问题描述 编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列. 输入格式:输入只有一行,即三个整数,中间用空格隔开. 输出格式:输出只有一行,即排序后的结果. 输入输出 ...
- [蓝桥杯]ALGO-92.算法训练_前缀表达式
问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值.输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法).“-”(减法).“*”(乘法)或“/”(除法),运算对象为 ...
随机推荐
- NHibernate many-to-one映射
many-to-one 数据方面,多条对一条. 非主键字段与主键字段的关联,在类中实现了一对一的单向映射.在类中是单实体映射. 订单充值业务.显然,一单位可以有多个充值信息. 通过表 Deposit里 ...
- annotation注释简单介绍
元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类: l 编写文档:通过代码里标识的元数据生成文档. l ...
- personal的制作
<style> .personal{ float: right; height: 40px; line-height: 40px; width: 200px; } . ...
- 基于PaaS和SaaS研发平台体系
基于PaaS和SaaS研发的商业云平台实战 背景介绍 SaaS.PaaS.IaaS等云服务模式已经被大家普遍认可,在研发过程中借力一些PaaS和SaaS平台,能够提升产品的研发速度和功能稳定程度.本文 ...
- rest-framework之响应器(渲染器)
rest-framework之响应器(渲染器) 本文目录 一 作用 二 内置渲染器 三 局部使用 四 全局使用 五 自定义显示模版 回到目录 一 作用 根据 用户请求URL 或 用户可接受的类型,筛选 ...
- Blender 画正四面体
正四面体打开“添加网格”菜单(Shift + A),然后选择“锥形”.将“顶点数”设置为3,将“半径1”保留为默认值1.000,将“半径2”设置为0.000.现在,将深度设置为 {根号2,约等于1.4 ...
- 安装排错 max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
https://blog.csdn.net/cookzrk/article/details/80179006 转载:https://my.oschina.net/u/2510243/blog/8105 ...
- windows查询占用端口
https://jingyan.baidu.com/article/3c48dd34491d47e10be358b8.html 1)端口号 - 查进程 netstat -aon|findstr &qu ...
- 写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。java算法
知识点一:equalsIgnore 1.使用equals( )方法比较两个字符串是否相等.它具有如下的一般形式: boolean equals(Object str) 这里str是一个用来与调用字符串 ...
- js判断输入的字符是否是汉字
<script type="text/javascript"> var c=prompt("请输入一个字符"); var isNumber = c& ...