udebug的样例都过了还是wa,球球帮看看
查看原帖
udebug的样例都过了还是wa,球球帮看看
291779
A_SOUL_Ava楼主2023/1/16 22:36
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
typedef long long ll;
typedef pair<int, int> PII;
const int N = 25;
int cnt;
int g[25][25], f[N][N], n;
int dx[]={0,0,-1},dy[]={1,-1,0};

void solve()
{
  
  int ans=0x3f3f3f3f;
  cin >> n;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      cin >> g[i][j];
  cout << "Case " << ++cnt << ": ";
  for (int i = 0; i < (1 << n) ; i++)
  {
    //cout << i <<endl;
    int sum=0;
    for (int j = 0; j < n; j++)
    {
      if (i >> j & 1)
        f[0][j] = 1;
      else
        f[0][j] = 0;
    }
    for (int i=1;i<n;i++)
    {
      for (int j=0;j<n;j++)
      {
          int x=i-1,y=j,t=0;
          for (int i=0;i<3;i++)
          {
            int xx=x+dx[i],yy=y+dy[i];
            if (xx>=0 && yy >=0 && xx<n)
              t+=f[xx][yy];
          }
          if (t%2==0)
            f[i][j]=0;
          else
            f[i][j]=1;
      }
    }
    bool flag=true;
    for(int i=0;i<n && flag;i++)
      for (int j=0;j<n;j++)
      {
        if (g[i][j]==0 && f[i][j]==1)
          sum++;
        else if (g[i][j]==1 && f[i][j]==0)
        {
          sum=0x3f3f3f3f;
          flag=false;
          break;
        }
      }
    ans=min(ans,sum);
  }
  
  if (ans!=0x3f3f3f3f)
     cout << ans <<endl;
  else
    cout << -1 <<endl;
}

int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  //freopen("D:\\in.txt","r",stdin); 
  //freopen("D:\\out.txt","w",stdout);
  int T;
  cin >> T;
  while (T--)
  {
    solve();
  }
  return 0;
}


2023/1/16 22:36
加载中...