蒟蒻求助!
  • 板块CF1579B Shifting Sort
  • 楼主Hisy
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/26 20:08
  • 上次更新2023/12/26 23:11:10
查看原帖
蒟蒻求助!
922691
Hisy楼主2023/12/26 20:08
#include<algorithm>
#include<iostream>
using namespace std;
int main(int argc,char **argv){
	int ans1[55]={0};
	int ans2[55]={0};
	int ans3[55]={0};
	int tot,ans=0;
    scanf("%d",&tot);
    while(tot--){
        int data1[55]={0};
        int data2[55]={0};
        int tag[55][55]={0};
        int sum[55]={0};
        int maxn,maxm,counter=0,tmp=1;
        ans=0;
        scanf("%d",&maxn);
        for(int iter=1;iter<=maxn;iter++){
            scanf("%d",&data1[iter]);
            data2[iter]=data1[iter];
        };
        sort(data2+1,data2+1+maxn);
        maxm=unique(data2+1,data2+1+maxn)-data2-1;
        for(int iter=1;iter<=maxn;iter++){
			data1[iter]=lower_bound(data2+1,data2+1+maxm,data1[iter])-data2;
		};
        for(int iter=1;iter<=maxn;iter++){
            if(data1[iter]==tmp){
				sum[1]++;
				tag[1][sum[1]]=iter;
			};
		};
        for(int ask=1;ask<=50;ask++){
            if(!sum[ask]){
				continue;
			};
            for(int iter=1;iter<=sum[ask];iter++){
                counter++;
                if(counter!=tag[ask][iter]){
                    ans++;
                    ans1[ans]=counter;
					ans2[ans]=tag[ask][iter];
					ans3[ans]=tag[ask][iter]-counter;
                    for(int fex=counter;fex<=tag[ask][iter];fex++){
						data2[fex]=data1[fex];
					};
                    for(int fex=counter+1;fex<=tag[ask][iter];fex++){
						data1[fex]=data2[fex-1];
					};
                    data1[counter]=ask;
                };
            };
            tmp++;
            for(int iter=counter+1;iter<=maxn;iter++){
                if(data1[iter]==tmp){
					sum[tmp]++;
					tag[tmp][sum[tmp]]=iter;
				};
            };
        };
        printf("%d\n",ans);
        for(int iter=1;iter<=ans;iter++){
            printf("%d %d %d\n",ans1[iter],ans2[iter],ans3[iter]);
        };
    };
    return 0;
};
2023/12/26 20:08
加载中...