蓝桥杯练习系统(算法训练)ALGO-950 逆序数奇偶

资源限制

内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s

问题描述

老虎moreD是一个勤于思考的青年,线性代数行列式时,其定义中提到了逆序数这一概念。不过众所周知我们只需要知道逆序数的奇偶性就行了,为了防止计算上的失误,moreD准备编写一个小程序来判定。只要判断奇偶性就行了哦!

另外作为一个技术宅,moreD对线性代数中最小下标为1非常不满,于是所有下标均从0开始。

输入格式

一个测试点包含多组数据,你需要不断读入直到输入结束。

每组数据第一行为一个n,接下来第二行输入n个数字,是一个0到n-1的排列。

输出格式

输出若干行,每行表示对应组数据逆序数奇偶性,奇数输出odd,偶数输出even。

样例输入

5

0 1 2 3 4

5

4 3 1 2 0

样例输出

even

odd

数据规模和约定

设每组测试点T个数据

1<=T<=10

1<=n<=100000

首先看暴力方法,超时(仅供理解题意):

4 3 1 2 0,求逆序数的方法:

  • 对于第1个数字4,前面没有比它大的数,逆序数为0
  • 对于3,前面有比它大的数字4,逆序数为1
  • 对于1,前面有4,3,都比它大,逆序数为2
  • 对于2 ,前面有4,3,1,两个比它大,逆序数为2
  • 对于0,前面有4,3,1,2,都比它大,逆序数为4

因此,该序列的逆序数=0+1+2+2+4=9,为odd

cpp 复制代码
#include<iostream>
using namespace std;

int main(){
	int n;
	while(cin>>n){
		int a[n];
		for(int i=0;i<n;i++){
			cin>>a[i];
		}
		long long int sum=0;
		for(int i=1;i<n;i++){
			for(int j=0;j<i;j++){
				if(a[j]>a[i]) sum++;
			}
		}
		if(sum%2==0) cout<<"even"<<endl;
		else cout<<"odd"<<endl;
	}
	return 0;
}

归并算法

cpp 复制代码
#include<iostream>
using namespace std;
const int N=100005;
int a[N];//待排序的数组
int tmp[N];
int res=0;

void msort(int l,int r){
	if(l==r) return;//只有一个数 
	int mid=(l+r)>>1;
	msort(l,mid);
	msort(mid+1,r);
	//合并 
	int i=l,j=mid+1,k=l;
	while(i<=mid&&j<=r){
		if(a[i]<=a[j]) tmp[k++]=a[i++];
		else{
			tmp[k++]=a[j++];
			res+=mid-i+1;
		}
	} 
	while(i<=mid) tmp[k++]=a[i++];
	while(j<=r) tmp[k++]=a[j++];
	for(int i=l;i<=r;i++) a[i]=tmp[i];
}
int main(){
	int n;
	while(cin>>n){
		res=0;
		for(int i=0;i<n;i++){
			cin>>a[i]; 
		}
		msort(0,n-1);
		if(res%2==0) cout<<"even"<<endl;
		else cout<<"odd"<<endl;
	}
	return 0;
} 

思路:归并算法。在右段取数时,计算逆序数,即取右段中的数时,该数的逆序数为左段中比它大的数。

相关推荐
BlockWay1 小时前
西甲赛程搬进平台:WEEX以竞猜开启区域合作落地
大数据·人工智能·算法·安全
马士兵教育1 小时前
程序员简历如何编写才能凸显出差异化,才能拿到更多面试机会?
开发语言·后端·面试·职场和发展·架构
hqyjzsb2 小时前
企业培训ROI深度分析:如何将CAIE认证的显性与隐性成本纳入投资回报率模型
人工智能·考研·职场和发展·创业创新·学习方法·业界资讯·改行学it
im_AMBER2 小时前
Leetcode 121 翻转二叉树 | 二叉树中的最大路径和
数据结构·学习·算法·leetcode
mit6.8243 小时前
二分+贪心
算法
programhelp_4 小时前
特斯拉 MLE 超详细面经 + 避坑
数据结构·人工智能·算法·面试·职场和发展
越甲八千4 小时前
深入了解迭代器erase()之后的失效逻辑
算法
躺柒4 小时前
读人工智能全球格局:未来趋势与中国位势06人类的未来(下)
大数据·人工智能·算法·ai·智能
List<String> error_P4 小时前
Python蓝桥杯常考知识点-模拟
开发语言·python·蓝桥杯
L_Aria5 小时前
6421. 【NOIP2019模拟11.11】匹配
c++·算法·动态规划