比赛 |
20241129 |
评测结果 |
WTTTTMEEEE |
题目名称 |
棋局 |
最终得分 |
0 |
用户昵称 |
黄天宇 |
运行时间 |
9.319 s |
代码语言 |
C++ |
内存使用 |
56.25 MiB |
提交时间 |
2024-11-29 11:59:12 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m;
const int MAXN=2e3+5;
int a[MAXN];
int k[MAXN];
bool bo;
int mapp[MAXN][MAXN];
bool vis[MAXN][MAXN];
int cnt;
int minx[MAXN];
void dfs(int nowx,int nowy,int ans){
//vis[nowx][nowy]=1;
if(ans==n*m){
for(int i=1;i<=n;i++){
int c=0;
for(int j=1;j<=m;j++){
if(mapp[i][j]==1){
c++;
}
}
if(c<a[i]){
c=0;
return;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(mapp[i][j]==1){
k[j]++;
cout<<k[j]<<endl;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(k[j]>=i){
cnt++;
}
}
minx[i]=min(minx[i],cnt);
cnt=0;
memset(k,0,sizeof(k));
}
return;
}
for(int k=0;k<=1;k++){
if(nowx+1>=1&&nowx+1<=n&&nowy>=1&&nowy<=m&&!vis[nowx+1][nowy]){
vis[nowx+1][nowy]=1;
mapp[nowx+1][nowy]=k;
dfs(nowx+1,nowy,ans+1);
mapp[nowx+1][nowy]=-1;
vis[nowx+1][nowy]=0;
}
if(nowx+1>=1&&nowx+1<=n&&nowy>=1&&nowy<=m&&!vis[nowx-1][nowy]){
vis[nowx-1][nowy]=1;
mapp[nowx-1][nowy]=k;
dfs(nowx-1,nowy,ans+1);
mapp[nowx-1][nowy]=-1;
vis[nowx-1][nowy]=0;
}
if(nowx+1>=1&&nowx+1<=n&&nowy>=1&&nowy<=m&&!vis[nowx][nowy+1]){
vis[nowx][nowy+1]=1;
mapp[nowx][nowy+1]=k;
dfs(nowx,nowy+1,ans+1);
mapp[nowx][nowy+1]=-1;
vis[nowx][nowy+1]=0;
}
if(nowx+1>=1&&nowx+1<=n&&nowy>=1&&nowy<=m&&!vis[nowx][nowy-1]){
vis[nowx][nowy-1]=1;
mapp[nowx][nowy-1]=k;
dfs(nowx,nowy-1,ans+1);
mapp[nowx][nowy-1]=-1;
vis[nowx][nowy-1]=0;
}
}
return;
}
int main(){
freopen("qiju.in","r",stdin);
freopen("qiju.out","w",stdout);
cin>>n>>m;
memset(mapp,-1,sizeof(mapp));
memset(minx,0x3f,sizeof(minx));
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]!=m-1) bo=1;
}
if(!bo){
for(int i=1;i<=n;i++){
if(n/2==0){
if(i==1) cout<<1<<" ";
else cout<<0<<" ";
}else
if(i<=(n+1)/2){
cout<<1<<" ";
}else
cout<<0<<" ";
}
return 0;
}else{
dfs(1,1,0);
for(int i=1;i<=n;i++){
cout<<minx[i]<<" ";
}
}
return 0;
}