zoukankan      html  css  js  c++  java
  • zoj 1201 Inversion

    这道题的意思是说,输入一数列,如果前面是‘P’,则就该数列各个数的逆序对输出,输入‘I’则将原来的数列输出。第一种情况比较好处理,第二种有点小麻烦。

    第二种情况要符合下面两个要求:

    1、先找到a[i]中最小的放在开头;

    2、i前面要有a[i]个比i大的数;

    代码:

     1 #include<stdio.h>
    2 #include<stdlib.h>
    3 #include<string.h>
    4 #include<iostream>
    5 using namespace std;
    6 int a[102],b[102];
    7 int jude(int x,int y)
    8 {
    9 int i,s=0;
    10 for(i=1;i<=y;i++)
    11 if(b[i]>x)//查找在y之前有几个是大于x的
    12 s++;
    13 if(s==a[x])//如果在y之前大于x的数正好等于a[x],则返回1;
    14 return 1;
    15 return 0;
    16 }
    17 int main()
    18 {
    19 int t,i,j;
    20 char m;
    21 while(scanf("%d",&t),t)
    22 {
    23 cin>>m;
    24 memset(a,0,sizeof(a));
    25 memset(b,0,sizeof(b));
    26 for(i=1;i<=t;i++)
    27 cin>>a[i];
    28 if(m=='P')
    29 {
    30 for(i=1;i<=t;i++)
    31 {
    32 for(j=1;j<i;j++)
    33 if(a[i]<a[j])
    34 b[a[i]]++;
    35 }
    36 }
    37 else
    38 {
    39 for(i=1;i<=t;i++)
    40 {
    41 for(j=1;j<=t;j++)
    42 {
    43 if(a[j]<i&&jude(j,i))//依次找a中最小的数,并判断是否符合要求。
    44 {
    45 b[i]=j;
    46 a[j]=1000000;
    47 break;
    48 }
    49 }
    50 }
    51 }
    52 for(i=1;i<=t;i++)
    53 {
    54 if(i==1)
    55 cout<<b[i];
    56 else
    57 cout<<" "<<b[i];
    58 }
    59 cout<<endl;
    60 }
    61 return 0;
    62 }
  • 相关阅读:
    iOS,Layer
    iOS 手势冲突
    ECharts
    手动安装Package Control
    webstorm配置svn详解
    js 对象 类型转换
    google 跨域解决办法
    关于内层DIV设置margin-top不起作用的解决方案
    图片与文字在div里实现垂直水平都居中
    css3之3D翻牌效果
  • 原文地址:https://www.cnblogs.com/misty1/p/2272620.html
Copyright © 2011-2022 走看看