比赛 |
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;
}