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; }