一个 naive 的想法:按照蒟蒻的理解,一次将某种颜色能删就删,而不同颜色间互不影响,那么对于某一行或某一列如果一种颜色出现了超过1次就能把该行或列的这种颜色删光,但是这样只过了 30 个点。题意理解是否有误?或者能否 hack 该做法?
#include<bits/stdc++.h>
#define N 2010
#define For(i,a,b) for(register int i=a;i<=b;i++)
using namespace std;
int n,m,cnt[130],mark[N][N],num;
char s[N][N];
int main()
{
scanf("%d%d",&n,&m);
For(i,1,n) scanf("%s",s[i]+1);
For(i,1,n)
{
memset(cnt,0,sizeof(cnt));
For(j,1,m) cnt[s[i][j]]++;
For(j,1,m) if(cnt[s[i][j]] > 1) mark[i][j]=true;
}
For(j,1,m)
{
memset(cnt,0,sizeof(cnt));
For(i,1,n) cnt[s[i][j]]++;
For(i,1,n) if(cnt[s[i][j]] > 1) mark[i][j]=true;
}For(i,1,n) For(j,1,m) num+=mark[i][j];
printf("%d\n",n*m-num);
return 0;
}