题目链接
https://codeforces.com/contest/1174/problem/B
题意
给一个数组,只能交换和为奇数的两个数,问最终能得到的字典序最小的序列。
题解
- 内心OS:由题,只有交换奇偶的操作。(可略:开始觉得那就是奇数序列内部顺序不变,偶数序列内部顺序不变,然后优先队列。后来想了想不是这么回事...分明通过奇偶交换同奇偶内部顺序也可以变)。结论就是只要有数组中奇偶都存在就可以随便交换位置。同奇偶的交换借助另一个与它们元素不同的另一个元素即可互换位置。
- 题解方法:当数组只有奇/偶,则输出原数组,否则输出排序后数组即可。
todo
好吧这并不是一份AC代码,居然在某个样例超时。可能是卡快排样例?但用List,shuffle再排序也无果。待解决。
代码
import java.util.Arrays;
import java.util.Scanner;
public class OddReOrder {
public static void main(String args[]) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[] arr=new int[n];
for(int i=0;i<n;++i) {
arr[i]=in.nextInt();
}
boolean oddFlag=false;
boolean evenFlag=false;
for(int i=0;i<n;++i) {
if((arr[i]&1)==1){
oddFlag=true;
}
else {
evenFlag=true;
}
if(evenFlag&&oddFlag) {
break;
}
}
if(evenFlag&&oddFlag) {
Arrays.sort(arr);
}
for(int i=0;i<n;++i) {
System.out.print(arr[i]+" ");
}
}
}