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 }
  • 相关阅读:
    Vue 组件之间传值(父子组件传值,vuex传值)
    利用computed和watch实现监听Vuex状态监听
    ESlint+VSCode自动格式化
    MySQL之分组查询(DQL)
    MySQL之排序查询(DQL)
    MySQL之条件查询(DQL)
    MySQL之概述
    jQuery之轮播图
    jQuery之添加删除记录
    jQuery之爱好选择
  • 原文地址:https://www.cnblogs.com/misty1/p/2272620.html
Copyright © 2011-2022 走看看