zoj 1201 Inversion

来源:互联网 发布:游族网络待遇怎么样 编辑:程序博客网 时间:2024/06/10 13:51

未完成。。

#include <iostream>using namespace std; int main(int argc, char *argv[]) {int n;cin >> n;while(n!=0){char state;cin >> state;int num[n];for(int i=0;i<n;i++){cin >> num[i];}if(state=='P'){for(int k=1;k<=n;k++){ int count=0; for(int i=0;i<n;i++){if(num[i]==k){for(int j=0;j<i;j++){if(num[j]>k)count++;}if(k<n) cout << count << " ";elsecout << count << endl;}}} }else {// state == "I" int P[n];int position[n];position[num[0]]=1;P[num[0]]=1;for(int i=1;i<n;i++){int plus=0;for(int j=0;j<=num[i];j++){if(position[j]==1){plus++;}}position[num[i]+plus]=1;P[num[i]+plus]=i+1;}for(int i=0;i<n;i++){if(i<n-1)cout << P[i] << " ";elsecout << P[i] << endl;}}} return 0;}

分析:做了一半隔了半个月做下一半真不爽,改天再修改


附正确答案:

#include <iostream>#include <string>using namespace std;int A[51];int B[51];int n;void P(int n){    int i,j;    for(j=1; j<=n; j++)    {        for(i=1; i<=n && A[i]!= j; i++)        {            if( A[i] > j)                B[j]++;        }        cout<<B[j];        if( j!=n )            cout<<" ";         else            cout<<endl;    }}void I(int n){    int i,j,count,k;    for(j=1; j<=n; j++)    {        count = 0;        for(i=1; i<=n && count<A[j]; i++)        {            if( B[i]==0 )                count++;        }               if( B[i] != 0)            for(k=i+1; k<=n; k++)                if( B[k] == 0 )                {                    i = k;                    break;                }        B[i] = j;          }    for(j=1; j<=n; j++)    {        cout<<B[j];        if( j!=n )            cout<<" ";         else            cout<<endl;    }}int main(void){    int n,i;    char ch;    while( cin>>n && n)    {        memset(B,0,sizeof(B));        getchar();        cin>>ch;        for(i=1; i<=n; i++)            cin>>A[i];        if( ch == 'P' )            P(n);        else            I(n);    }system("pause");return 0;}


0 0
原创粉丝点击