HDU5821 贪心,排序(+sort结构体排序,稳定性和不稳定性)

Note:这个题无关Sort的稳定性问题,只是突然想起,不稳定排序的sor如何写cmp函数才变成稳定性排序,就是把return a1.value<=a2.value 写为return a1.value

0

题目很清楚

1

每个数的归宿都是唯一的,第一个数组要变成第二个数组的样子,如果可以,那么每个数都对应唯一的正确位置,而位置就是1到n,所以每次输入一个调整的区间,就将该区间内的数sort。

2

#include 
#include 
#include 

using namespace std;
const int maxn=1010;
struct Nums{
    int value;
    int pos;
    bool operator <(struct Nums nn)const{
        return pos>kase;
    int n,m;
    while(kase--){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            scanf("%d",&num[i].value);
            num[i].pos=-1;
        }
        for(int i=1;i<=n;i++){
            scanf("%d",&b[i]);
            for(int j=1;j<=n;j++){
                if(num[j].value==b[i]&&num[j].pos==-1){
                    num[j].pos=i;
                    break;//一一对应,break
                }
            }
        }
        int l,r;
        for(int i=1;i<=m;i++){
            scanf("%d%d",&l,&r);
            if(l>r) swap(l,r);
            sort(num+l,num+1+r);//a[]={5,4,3,2,1,0},sort(a+1,a+1+4);a[]={5,1,2,3,4,0};
        }
        int flag=1;
        for(int i=1;i<=n;i++){
            if(num[i].value!=b[i]){
                flag=0;
                break;
            }
        }
        if(flag){
            cout<<"Yes"<



你可能感兴趣的:(ACM,其他,ACM,思维)