递增
2015-06-13 08:19
302 查看
Description
给你N个数,分别为a1,a2…aN,你现在可以交换两个数(只有一次机会),问你是否可以使这个序列成为递增序列。
即x1 <= X2 <= X3 <= X4.你只有一次交换机会,也可以选择不交换。
Input
输入包含多组测试用例,对于每组测试用例。
输入N(1 <= N <= 100000)
接下来输入N个数ai(0 <= ai <= 100000)。
Output
最多交换两个数,如果使这个序列成为递增序列输出YES,否则输出NO。
Sample Input
3
1 2 3
4
1 2 4 3
4
4 3 2 1
Sample Output
YES
YES
NO
题目比较水,但是我一直不在正确的思路上,进入正题吧————就是排序
下面是比较水的代码:`
给你N个数,分别为a1,a2…aN,你现在可以交换两个数(只有一次机会),问你是否可以使这个序列成为递增序列。
即x1 <= X2 <= X3 <= X4.你只有一次交换机会,也可以选择不交换。
Input
输入包含多组测试用例,对于每组测试用例。
输入N(1 <= N <= 100000)
接下来输入N个数ai(0 <= ai <= 100000)。
Output
最多交换两个数,如果使这个序列成为递增序列输出YES,否则输出NO。
Sample Input
3
1 2 3
4
1 2 4 3
4
4 3 2 1
Sample Output
YES
YES
NO
题目比较水,但是我一直不在正确的思路上,进入正题吧————就是排序
下面是比较水的代码:`
[code]#include <stdio.h> #include <string.h> #include <stdlib.h> #include <algorithm> using namespace std; int aa[100005], bb[100005]; int main() { int n; while(~scanf("%d", &n)) { memset(bb, 0, sizeof(bb)); for(int i = 0; i < n; i++) { scanf("%d", &aa[i]); bb[i] = aa[i]; } sort(bb, bb + n); int sm = 0; for(int i = 0; i < n; i++) if(aa[i] != bb[i]) sm++; if(sm == 0 || sm == 2) printf("YES\n"); else printf("NO\n"); } return 0; }
相关文章推荐
- 存货数据表
- 设计模式(享元模式)
- 感知哈希(pHash)和梯度哈希(dHash)的Python+OpenCV+SciPy实现
- 黑色产业链-最明智的网站链接隐藏方法
- Storm系列(二):使用Csharp创建你的第一个Storm拓扑(wordcount)
- 小菜编写通讯录
- 《大话设计模式》--加薪非要老总批--职责链模式<Chain Of Responsibility>(24)
- 怎么样putty打开图形化管理工具,在终端上
- Search for a Range
- 告诉你LTE-FDD与LTE-TDD的区别
- 详解xml文件描述,读取方法以及将对象存放到xml文档中,并按照指定的特征寻找的方案
- (1)单例模式
- 黑马程序员——java基础-正则表达式
- [bzoj 4080] Wf2014 Sensor Network
- 获取网络软件更新信息 并发送消息 通知 handler 更新UI
- android 获取 版本号 和 手机的 部分信息
- Docker的安全基准
- Python 学习笔记6
- Oracle数据库之PL/SQL程序基础设计
- 黑马程序员——高新技术-反射