HDU2019 数列有序!【入门】
数列有序!
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 172474 Accepted Submission(s): 69813
Problem Description
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
Input
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。
Output
对于每个测试实例,输出插入新的元素后的数列。
Sample Input
3 3
1 2 4
0 0
Sample Output
1 2 3 4
Author
lcy
Source
C语言程序设计练习(三)
问题链接:HDU2019 数列有序!
问题简述:(略)
问题分析:
按Markdown格式重写了题解,旧版题解参见参考链接。
因为输入数据是有序的,也许会考虑用插入排序来做,那就有点绕远了。只要做排序就有可能可能做数据交换,程序速度就慢了。
读入n个数据存储在数组中,再进行计算输出是可以的,浪费空间。边读入数据边计算输出结果是节省空间的解题方案。
解法一:输入流处理
把输入看作数据流,边读入数据边计算输出结果,可以节省空间。
解法二:插入数据
读入的数据存储在数组中,然后将m插入到数组的合适位置,最后输出结果。这种做法虽然浪费存储空间,也是一种可行的解题方案。
这个做法类似于插入排序的局部处理,是常见的处理手法。
程序说明:(略)
参考链接:HDU2019 数列有序!【入门】
题记:(略)
AC的C语言程序(解法一:输入流处理)如下:
/* HDU2019 数列有序! */#include <stdio.h>int main(void)
{int n, m, a, i;while(scanf("%d%d", &n, &m) != EOF && (n || m)) {if(n == 0) printf("%d\n", m); /* n=0时,只需要输出m */else {/* 读入n个数据,同时输出数据,并且在适当位置输出m */int flag = 1;for (i = 1; i <= n; i++) {scanf("%d", &a);if (m < a && flag) {if (i == 1) printf("%d", m);else printf(" %d", m);flag = 0;}if (i > 1 || flag == 0) printf(" ");printf("%d", a);}if (flag) printf(" %d", m); /* m最大 */printf("\n");}}return 0;
}
AC的C语言程序(解法二:插入数据)如下:
/* HDU2019 数列有序! */#include <stdio.h>#define N 100
int a[N + 1];int main(void)
{int n, m, i, j;while(scanf("%d%d", &n, &m) != EOF && (n || m)) {if(n == 0) printf("%d\n", m); /* n=0时,只需要输出m */else {for (i = 0; i < n; i++) scanf("%d", &a[i]);for (i = 0; i < n; i++) if (m < a[i]) break; /* 找到插入位置 */for (j = n; j > i; j--) a[j] = a[j - 1]; /* 后面的数据移动一个位置 */a[i] = m; /* 插入m *//* 输出结果 */for (i = 0; i < n; i++)printf("%d ", a[i]);printf("%d\n", a[n]);}}return 0;
}
HDU2019 数列有序!【入门】相关推荐
- HDU2019 数列有序!
Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序. Input 输入数据包含多个测 ...
- HDU2019 数列有序
数列有序! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- hdu2019——数列有序解题报告
原题: Problem Description 有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序. Input 输入数据包 ...
- #6279. 数列分块入门 3(区间修改,查询权值前驱)
#6279. 数列分块入门 3 这是使用hzwer建议的set写的分块代码,set自动排序,支持二分查找,但是常数较大,比我下面写的用vector实现的分块慢了三倍,空间大了10倍. #include ...
- 数列分块入门(套题)(loj6277,loj6278,loj6279,loj6280,loj6281,loj6282,loj6283,loj6284,loj6285)
前言 zjoi考差了,码一些分块题缓解一下心情 壹 数列分块入门 1[loj6277] 题目大意:区间加,单点查 直接分块,区间加时完全覆盖的块打tag,边界块暴力重构 块大小设为n\sqrt nn ...
- 数列分块入门 (1 ~ 7)
分块 6277. 数列分块入门 1 分块思想 我们把每m个元素分成一块,所以我们总共的块数就是n/mn / mn/m块,一般情况下我们取m=nm = \sqrt{n}m=n.对于区间加操作,我们可以 ...
- 「分块」数列分块入门1 – 9
ACM模板 放暑假了,回归!!! 自己不会写暴力,而且好久没写代码了,于是学学分块的优雅暴力~ 「分块入门-LibreOJ」 「分块」数列分块入门1 – 9 by hzwer 数列简单分块问题实际上有 ...
- LOJ——#6277. 数列分块入门 1
~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法--分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...
- 【分块入门】LOJ 数列分块入门 1 - 9 (学习更新……)
dl题解 _「分块」数列分块入门1 – 9 by hzwer LOJ #6277. 数列分块入门 1 题意:给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值. 时间限制:100ms 分块 ...
最新文章
- ssl charles 参数看不到_SSL证书=安全?小心,别错漏了TA……
- windows server backup
- java基础_数组常用算法
- 图表控件 c++_用C/C++编写16位虚拟内核
- 每小时50哈希——看看一个内部员工是如何摧毁整个公司网络的?
- Python之旅Day6 模块应用
- Storm介绍实际开发注意事项
- python为什么不能删除_为什么python不允许我删除文件?
- java 应用编程接口_java 应用程序接口(api)是什么
- Codeblocks下载安装
- 如何更改html的默认应用,win10如何修改默认应用
- 远程软件TeamViewer如何导出选项注册表文件?
- E-Trunk小实验
- httpcanary和fiddler的使用教程
- soul显示服务器异常,soul账号状态异常是什么意思?soul账号异常操作多久解封
- Transact使用
- 矩阵的基础知识回顾:矩阵乘法,矩阵的逆,伴随矩阵,矩阵的转置,行列式,相似矩阵,实对称矩阵
- 软件著作权的好处有哪些?软著含金量高吗?
- Android7.1 控制背光流程
- 无人驾驶数据库汇总(不断更新)
热门文章
- 阿群笔记:CentOS7 在线安装 docker 的推荐方法
- 英文文档: 如何使用 OpenSSL 创建与吊销数字证书
- linux find返回数据不一样,请问一个linux的find的问题,如何让find的返回结果不显示“Perm...
- Unity4.3 2D新特性
- if shell 条件语句简写_shell中的if语句
- linuxsz隐藏文件_linux中rz上传、sz下载命令详解
- 【java学习之路】(java SE篇)013.lambda表达式
- ajax请求向服务器修改数据,用Jquery实现可编辑表格并用AJAX提交到服务器修改数据...
- 行列式算法c语言,新手作品:行列式计算C语言版
- linux java bin 安装_linux下安装后缀为bin的Java JDK