首页 > 技术文章 > CF1509A Average Height 题解

jiangtaizhe001 2021-04-20 19:02 原文

题目传送门
题目翻译:给出一个序列,如果一行上的两个连续的成员 \(u\)\(v\) 的平均高度为整数,即 \(\frac{a_u+a_v}{2}\) 为整数,则认为它们是上镜的。将序列重新排序,让上镜的数量最大,求这个重新排序的序列。
我们发现只要是两个数字同奇同偶那么这两个数就是上镜的。
我们只要把所有的奇数放在前面,所有的偶数放在后面就可以了。
代码:

#include<cstdio>
#define maxn 2039
using namespace std;
//#define debug
typedef int Type;
inline Type read(){
	Type sum=0;
	int flag=0;
	char c=getchar();
	while((c<'0'||c>'9')&&c!='-') c=getchar();
	if(c=='-') c=getchar(),flag=1;
	while('0'<=c&&c<='9'){
		sum=(sum<<1)+(sum<<3)+(c^48);
		c=getchar();
	}
	if(flag) return -sum;
	return sum;
}
int cnt1,cnt2;
int a1[maxn],a2[maxn];
int a,T,n;
int main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
    T=read();
    while(T--){
    	n=read();
    	cnt1=cnt2=0;
    	for(int i=1;i<=n;i++){
    		a=read();
    		if(a&1) a1[++cnt1]=a;
    		else a2[++cnt2]=a;
		}
		for(int i=1;i<=cnt1;i++)
		    printf("%d ",a1[i]);
		for(int i=1;i<=cnt2;i++)
		    printf("%d ",a2[i]);
		putchar('\n');
	}
	return 0;
}

推荐阅读