比赛 NOIP2023模拟赛1 评测结果 AWWWWWWWWW
题目名称 奇怪的监狱 最终得分 10
用户昵称 黄天宇 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2023-11-13 11:45:48
显示代码纯文本
#include<iostream>
#include<cstring>
using namespace std;
int p,q;
long long minx=2e9,sum,num1,num2,num3,num4,num5;
int a[1005];
bool f[1005];
int main(){
    freopen("prison.in","r",stdin);
    freopen("prison.out","w",stdout);
    cin>>p>>q;
    for(int i=1;i<=q;i++){
        cin>>a[i];
    }
    if(q==1){
        cout<<p-1<<endl;
        return 0;
    }
    if(q==2){
        for(int k1=1;k1<=q;k1++){
           sum=0;
           f[a[k1]]=1;
           sum+=p-1;
        for(int k2=1;k2<=q;k2++){
            if(k2==k1) continue;
            num2=sum;
            f[a[k2]]=1;
            if(a[k2]<a[k1]){
                sum+=a[k2]-1+a[k1]-a[k2]-1;
            }else
            sum+=a[k2]-a[k1]-1+p-a[k2]-1;
            minx=min(minx,sum);
            sum=num2;
            f[a[k2]]=0;
    }
    f[a[k1]]=0;
}
}
////////////////////////////////////
    if(q==3){
       for(int k1=1;k1<=q;k1++){
           sum=0;
           f[a[k1]]=1;
           sum+=p-1;
        for(int k2=1;k2<=q;k2++){
            if(k2==k1) continue;
            num2=sum;
            f[a[k2]]=1;
            if(a[k2]<a[k1]){
                sum+=a[k2]-1+a[k1]-a[k2]-1;
            }else
            sum+=a[k2]-a[k1]-1+p-a[k2]-1;
            for(int k3=1;k3<=q;k3++){
                if(k2==k3||k3==k1) continue;
                num3=sum;
                f[a[k3]]=1;
                for(int i=a[k3]-1;i>=1;i--){
                    if(f[i]) break;
                    sum++;
                }
                for(int i=a[k3]+1;i<=p;i++){
                    if(f[i]) break;
                    sum++;
                }
                minx=min(sum,minx);
                sum=num3;
                f[a[k3]]=0;
        }    
        sum=num2;
        f[a[k2]]=0;
    } 
    f[a[k1]]=0;
    }
}
//////////////////////////////////////////
    if(q==4){
       for(int k1=1;k1<=q;k1++){
           memset(f,0,sizeof(f));
           sum=0;
           f[a[k1]]=1;
           sum+=p-1;
        for(int k2=1;k2<=q;k2++){
            if(k2==k1) continue;
            num2=sum;
            f[a[k2]]=1;
            if(a[k2]<a[k1]){
                sum+=a[k2]-1+a[k1]-a[k2]-1;
            }else
            sum+=a[k2]-a[k1]-1+p-a[k2]-1;
            for(int k3=1;k3<=q;k3++){
                if(k2==k3||k3==k1) continue;
                num3=sum;
                f[a[k3]]=1;
                for(int i=a[k3]-1;i>=1;i--){
                    if(f[i]) break;
                    sum++;
                }
                for(int i=a[k3]+1;i<=p;i++){
                            if(f[i]) break;
                            sum++;
                        }
                for(int k4=1;k4<=q;k4++){
                    if(k1==k4||k2==k4||k3==k4) continue;
                    num4=sum;
                    f[a[k4]]=1;
                        for(int i=a[k4]-1;i>=1;i--){
                            if(f[i]) break;
                            sum++;
                        }
                        for(int i=a[k4]+1;i<=p;i++){
                            if(f[i]) break;
                            sum++;
                        }
                        minx=min(minx,sum);
                sum=num4;
                f[a[k4]]=0;
            }   
            sum=num3; 
            f[a[k3]]=0;    
        }    
        sum=num2;
        f[a[k2]]=0;
    } 
    f[a[k1]]=0;
    }
} 
/////////////
    if(q==5){
       for(int k1=1;k1<=q;k1++){
           memset(f,0,sizeof(f));
           sum=0;
           f[a[k1]]=1;
           sum+=p-1;
        for(int k2=1;k2<=q;k2++){
            if(k1==k2) continue;
            num2=sum;
            f[a[k2]]=1;
            if(a[k2]<a[k1]){
                sum+=a[k2]-1+a[k1]-a[k2]-1;
            }else
            sum+=a[k2]-a[k1]-1+p-a[k2]-1;
            for(int k3=1;k3<=q;k3++){
                if(k2==k3||k3==k1) continue;
                num3=sum;
                f[a[k3]]=1;
                for(int i=a[k3]-1;i>=1;i--){
                    if(f[i]) break;
                    sum++;
                }
                for(int i=a[k3]+1;i<=p;i++){
                            if(f[i]) break;
                            sum++;
                        }
                for(int k4=1;k4<=q;k4++){
                    if(k1==k4||k2==k4||k3==k4) continue;
                    num4=sum;
                    f[a[k4]]=1;
                        for(int i=a[k4]-1;i>=1;i--){
                            if(f[i]) break;
                            sum++;
                        }
                        for(int i=a[k4]+1;i<=p;i++){
                            if(f[i]) break;
                            sum++;
                        }
                    for(int k5=1;k5<=q;k5++){
                        if(k1==k5||k2==k5||k3==k5||k4==k5) continue;
                        num5=sum;
                        f[a[k5]]=1;
                        for(int i=a[k5]-1;i>=1;i--){
                            if(f[i]) break;
                            sum++;
                        }
                        for(int i=a[k5]+1;i<=p;i++){
                            if(f[i]) break;
                            sum++;
                        }
                        minx=min(minx,sum);
                        sum=num5;
                        f[a[k5]]=0;
                }
                sum=num4;
                f[a[k4]]=0;
            }   
            sum=num3;     
            f[a[k3]]=0;
        }    
        sum=num2;
        f[a[k2]]=0;
    } 
    f[a[k1]]=0;
    }
} 
    cout<<minx<<endl;
    return 0;
}