12分求助
查看原帖
12分求助
1776874
Wivznziv楼主2025/6/30 10:09

RT

#include<iostream>
#include<cstdio>
using namespace std;
#define maxn 21
int T,n,m;
bool a[maxn][maxn],road[maxn][maxn];
void turnz()
{
  for(int i=1;i<=n;i++)
   for(int j=1;j<=n;j++)
     road[i][j]=false;
}
void change(long long shu,int now)
{
  int tim=m;
  while(tim)
  {
    int end=shu%10;
    if(end)  a[now][tim--]=true;
    else  a[now][tim--]=false;
    shu/=10;
  }
}
bool check(int idl,int idr)
{
  bool flagl=false,flagr=false;
  for(int i=1;i<=m;i++)
  {
    if(a[idl][i] && !a[idr][i])  flagl=true;
    if(!a[idl][i] && a[idr][i])  flagr=true;
  }
  if(flagl==flagr)  return false;
  return true;
}

int main()
{
	cin>>T;
	while(T--)
	{
	  int ans=0;
	  cin>>n>>m;
	  turnz();
	  for(int i=1;i<=n;i++)
	  {
	    long long shu;
	    cin>>shu;
	    change(shu,i);
	  }
	  for(int i=1;i<n;i++)
	   for(int j=i+1;j<=n;j++)
	     if(check(i,j))  road[i][j]=true;
	  for(int i=1;i<=n;i++)
	   for(int j=1;j<=n;j++)
	    for(int k=1;k<=n;k++)
	      if(road[i][j] && road[j][k] && road[i][k])  road[i][k]=false;
	  for(int i=1;i<=n;i++)
	   for(int j=1;j<=n;j++)
	     if(road[i][j])  ans++;
	  cout<<ans<<endl;
	}
	return 0;
}

2025/6/30 10:09
加载中...