没话说了,一晚上纠结在re上,如果真是数组越界还好说。没事学什么topcoder写法,把for() define 了。。。。啊,仰天长叹。
此题,还是有点难度,就是在第二步转为inversion的。开始觉得是简单题就觉得用类写吧,改的我吐了,长见识了。。==|||
算是第一个真正意义上c++写的吧,虽然还是有点不伦不类。
#include <cstdio>
#include <iostream>
#define MAXN 105
using namespace std;
class Inversion{
public:
void changeToI(int P[],int N)
{
int I[MAXN],i,j;
int num;
memset(I,0,sizeof(I));
for(i=1;i<=N;i++)
{
num=0;
for(j=1;j<=N;j++)
{
if(P[j]==i) {I[i]=num;break;}
if(P[j]>i) num++;
}
}
for(i=1;i<N;i++)
cout<<I[i]<<" ";
cout<<I[N]<<endl;
}
void changeToP(int I[],int N)
{
int P[MAXN],i,j,k;
memset(P,0,sizeof(P));
for(i=1;i<=N;i++)
{
int num=0;
for(j=1;j<=N&&num<I[i];j++)
if(P[j]==0)
num++;
if(P[j]!=0)
for(k=j+1;k<=N;k++)
if(P[k]==0)
{j=k;break;}
P[j]=i;
}
for(i=1;i<N;i++)
cout<<P[i]<<" ";
cout<<P[i]<<endl;
}
};
int main()
{
int N;
int a[MAXN];
char ch;
int i;
Inversion IN;
while(cin>>N,N)
{
cin>>ch;
for(i=1;i<=N;i++) cin>>a[i];
if(ch=='P')
IN.changeToI(a,N);
if(ch=='I')
IN.changeToP(a,N);
}
return 0;
}