Gym - 100971B-思维-特殊情况
2017-05-19 16:48
239 查看
https://cn.vjudge.net/contest/164409#problem/B
给定一个序列,如果他的序号和他的值一样,那么他就是不正经的。
问你最少经过多少次操作,能够他们都变成正经的(值和序号都不一样)
要是偶数 直接就除以2就行,奇数就加1.
偶数两两交换,
奇数随便拉一个本来就不符合情况的值和他交换(是地址还是值不用考虑,哈哈,真的,就是顺序问题)
第一个wrong了。。
随手打了一个1 2 3 4 5 和 5 4 3 2 1
发现这种情况没有正经的数。。。
只好特判,当不正经的数有一个 或者没有时(只有一个,也没办法和本身换啊。),从正经数里找一个。
否则的话从队列了随便拉一个。.。
这一道题好像有一次的更换题。。
都是要注意特判的条件,不能一劳永逸,想当然。思维要缜密。
给定一个序列,如果他的序号和他的值一样,那么他就是不正经的。
问你最少经过多少次操作,能够他们都变成正经的(值和序号都不一样)
要是偶数 直接就除以2就行,奇数就加1.
偶数两两交换,
奇数随便拉一个本来就不符合情况的值和他交换(是地址还是值不用考虑,哈哈,真的,就是顺序问题)
第一个wrong了。。
随手打了一个1 2 3 4 5 和 5 4 3 2 1
发现这种情况没有正经的数。。。
只好特判,当不正经的数有一个 或者没有时(只有一个,也没办法和本身换啊。),从正经数里找一个。
否则的话从队列了随便拉一个。.。
这一道题好像有一次的更换题。。
都是要注意特判的条件,不能一劳永逸,想当然。思维要缜密。
#include <iostream> #include <cstdio> #include <vector> using namespace std; const int maxn=200008; int main() { int m; int a[maxn]; vector<int>q; int x; int y; scanf("%d",&m); bool flag=false; for(int i=1;i<=m;i++) {scanf("%d",&a[i]); if(a[i]==i) q.push_back(a[i]); else y=a[i]; } if(q.size()>1) x=q[0]; else x=y; printf("%d\n",q.size()/2+q.size()%2); if(q.size()%2==0) {for(int i=0;i<q.size();i+=2) { printf("%d %d\n",q[i],q[i+1]); } } else { if(q.size()%2==1) { printf("%d %d\n",q[q.size()-1],x); for(int i=0;i<q.size()-1;i+=2) printf("%d %d\n",q[i],q[i+1]); } } return 0; }
相关文章推荐
- [android]EditText inputType 特殊情况得只有数字和特殊符号
- 梯形剖分入门(特殊情况)【ice】
- UESTC 1582 奇迹的魔法啊,再度出现! 二进制树(字典树的一种特殊情况)
- Jmeter特殊情况一:登录请求中密码加密的情况
- jzoj3782 【NOIP2014模拟8.17】组队 (特殊情况的2sat,dp)
- Problem D. Dales and Hills - Gym - 101411D 【动态规划经典题 - 思维】
- 导入包的特殊情况
- Gym 101243.E - Cupcakes(思维题+正确性确切证明方式?)
- 解析url参数含有特殊字符的情况
- Gym 100971D Laying Cables 二分 || 单调栈
- Mybatis中使用sql几种特殊情况
- Selenium IDE处理特殊复杂情况总结
- I - Por Costel and the Pairs Gym - 100923I _思维啊——可惜我现在还没
- try catch finally 对于return特殊情况的处理
- poj 1719 Shooting Contest 二分图匹配的一种特殊情况
- Swift 1.1语言函数参数的特殊情况本地参数名外部参数名
- Play Framework 发现并没有热启动的特殊情况
- js运算的特殊情况
- 编程时该考虑到的特殊情况
- jQuery语法中,table、tr、td标签并不是父子关系的特殊情况