1201_Inversion

Let { A1,A2,...,An } be a permutation of the set{ 1,2,..., n}. If i < j and Ai > Aj then the pair (Ai,Aj) is called an "inversion" of the permutation. For example, the permutation {3, 1, 4, 2} has three inversions: (3,1), (3,2) and (4,2).
  The inversion table B1,B2,...,Bn of the permutation { A1,A2,...,An } is obtained by letting Bj be the number of elements to the left of j that are greater than j. (In other words, Bj is the number of inversions whose second component is j.) For example, the permutation:
{ 5,9,1,8,2,6,4,7,3 }
has the inversion table
2 3 6 4 0 2 2 1 0
since there are 2 numbers, 5 and 9, to the left of 1; 3 numbers, 5, 9 and 8, to the left of 2; etc.
  Perhaps the most important fact about inversions is Marshall Hall's observation that an inversion table uniquely determines the corresponding permutation. So your task is to convert a permutation to its inversion table, or vise versa, to convert from an inversion table to the corresponding permutation.

Input:
The input consists of several test cases. Each test case contains two lines.
The first line contains a single integer N ( 1 <= N <= 50) which indicates the number of elements in the permutation/invertion table.
The second line begins with a single charactor either 'P', meaning that the next N integers form a permutation, or 'I', meaning that the next N integers form an inversion table.
Following are N integers, separated by spaces. The input is terminated by a line contains N=0.

Output:
For each case of the input output a line of intergers, seperated by a single space (no space at the end of the line). If the input is a permutation, your output will be the corresponding inversion table; if the input is an inversion table, your output will be the corresponding permutation.

Sample Input:

9
P 5 9 1 8 2 6 4 7 3
9
I 2 3 6 4 0 2 2 1 0
0


Sample Output:

2 3 6 4 0 2 2 1 0
5 9 1 8 2 6 4 7 3

------------------------------------------------------------------------------------------------------------------------------------------#include<stdio.h>
#include<string.h>

long aa[ 60 ] , bb [ 60 ]  , n ;
long count ;
char ch[3] ;
int main()
{
 int i , j  , k ;
 while( scanf("%ld" , &n ) !=EOF &&  n )
 {
  count = 0;
  memset( aa ,0 , sizeof( aa)) ;
  memset( bb , 0 , sizeof( bb ) );
  memset( ch , '/0' , sizeof( ch )) ;
  //input
  scanf("%s" ,ch ) ;
  for( i = 1 ; i<= n ; i++ )
  {
   scanf("%ld" , & aa[ i ] ) ;
  }
  //process
  if( !strcmp(ch , "P") )
  {
   for( i = 1 ; i<= n ; i++ )
   {
    for( j = 1 ; j<= n ; j++  )
    {
     if( aa[ j ] > i )
      count++ ;
     else
      if( aa[ j ] == i )
       break ;
    }
    bb[ i ] = count ;
    count = 0 ;
   }//end for
   for( i  = 1; i< n ; i++ )
    printf("%ld " , bb[ i ] ) ;
   printf("%ld/n" , bb[ n ]) ;
  }
  else
  {

   for( i = 1 ; i<= n ; i++ )
   {
    j = 1 ;//
    if( aa[ i ] > 0 )
    {
     //这里乱搞,头乱 ,也过了
     while( aa[ i ] )
      if( ! bb[ j++ ] )
       aa[ i ] -- ;
     while( bb[ j ]) j++ ;
     bb[ j ] = i ;
    }
    else
     if( aa[ i ] == 0 )
     {
      while( bb[ j ] ) j++ ;
      bb[ j ] = i ;
     }
   } //end for
  for( i = 1 ; i< n ; i++ )
   printf("%ld " , bb[ i ] ) ;
  printf("%ld/n" , bb[ n ]) ;


  }
  
 }


 return 0 ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园失物招领系统管理系统按照操作主体分为管理员和用户。管理员的功能包括字典管理、论坛管理、公告信息管理、失物招领管理、失物认领管理、寻物启示管理、寻物认领管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 校园失物招领系统管理系统可以提高校园失物招领系统信息管理问题的解决效率,优化校园失物招领系统信息处理流程,保证校园失物招领系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 ,管理员权限操作的功能包括管理公告,管理校园失物招领系统信息,包括失物招领管理,培训管理,寻物启事管理,薪资管理等,可以管理公告。 失物招领管理界面,管理员在失物招领管理界面中可以对界面中显示,可以对失物招领信息的失物招领状态进行查看,可以添加新的失物招领信息等。寻物启事管理界面,管理员在寻物启事管理界面中查看寻物启事种类信息,寻物启事描述信息,新增寻物启事信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值