hrbeu 1200 Inversion 模拟

http://acm.hrbeu.edu.cn/index.php?act=problem&id=1200

题意:

两种提问方式:

  P:输入:对于每一个数1,2……n他之前有几个数比他大

   输出:输出n个数的排列方式

  I:输入:输入n个数的排列方式

   输出:对于每一个数1,2……n他之前有几个数比他大

分析:模拟

View Code
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
#define re(i,n) for(int i=0;i<n;i++)
#define re1(i,n) for(int i=1;i<=n;i++)
#define clr(x,y) memset(x,y,sizeof(x))
#define inf (1<<29)
const int maxn = 52;
int n;
char ch[5];
int a[maxn] ,b[maxn];
vector<int> pan;
void P() {
    clr(b,0);
    re1(i,n) re1(j,i-1) if(a[j] > a[i]) b[a[i]] ++;
    printf("%d",b[1]);
    re1(i,n-1) printf(" %d",b[i+1]);
    printf("\n");
}
void I() {
    pan.clear();
    for(int i=n;i>=1;i--) {
        pan.insert(pan.begin()+a[i],i);
    }
    printf("%d",pan[0]);
    re1(i,n-1) printf(" %d",pan[i]);
    printf("\n");
}
int main() {
    while(~scanf("%d",&n) && n) {
        scanf("%s",ch);
        re1(i,n) scanf("%d",&a[i]);
        if(ch[0]=='P') P();
        else if(ch[0]=='I') I();
    }
    return 0;
}
posted @ 2012-07-10 12:51  lenohoo  阅读(166)  评论(0编辑  收藏  举报