首页 > 其他 > 详细

ZOJ 1201 Inversion

时间:2014-02-27 09:00:47      阅读:546      评论:0      收藏:0      [点我收藏+]

原题链接

题目大意:给一个数组{ A1,A2,…,An } ,要求生成另一个数组B1,B2,…,Bn,使得Bi表示的是在数组A中排在i前面大于i的数字的个数。题目的输入是数组A(字母P表示)或者数组B(字母I表示),要求输出对应的B或者A。

解法:先读取首字母,如果是P,则调用permutation(),反之调用inversion()。permutation是按照正常方法寻找。inverse是先设置一个空的数组(相当于A数组),按照B数组的顺序一个个往‘A’中放。

 

参考代码:

#include<iostream>
using namespace std;


void permutation();
void inversion();
int i,j,n,a[50],b[50];

int main(){
	char c;
	while(cin>>n && n!=0){
		cin>>c;
		for(i=0;i<n;i++)
			cin>>a[i];
		if(c==‘P‘)
			permutation();
		else if(c==‘I‘)
			inversion();
	}


	return 0;
}

void permutation(){
	for(i=0;i<n;i++){
		b[i]=0;
		for(j=0;j<n;j++){
			if(a[j]>i+1)
				b[i]++;
			if(a[j]==i+1)
				break;
		}
	}
	for(i=0;i<n-1;i++)
		cout<<b[i]<<‘ ‘;
	cout<<b[n-1]<<‘\n‘;
}

void inversion(){
	int num,p;
	for(i=0;i<n;i++)
		b[i]=0;
	for(i=0;i<n;i++){
		num=a[i];
		p=0;
		while(num>=0){
			if(b[p]==0)
				num--;
			p++;
		}
		b[--p]=i+1;
	}
	for(i=0;i<n-1;i++)
		cout<<b[i]<<‘ ‘;
	cout<<b[n-1]<<‘\n‘;
}

ZOJ 1201 Inversion,布布扣,bubuko.com

ZOJ 1201 Inversion

原文:http://www.cnblogs.com/naive/p/3568804.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!