求助
查看原帖
求助
844496
J_Kobe楼主2024/7/5 13:10
#include <bits/stdc++.h>
using namespace std;

const int N = 2005;
string s[N];
int n, m, cnt1[N][26], cnt2[N][26];
bool f1[N], f2[N];

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie();cout.tie();
	cin >> n >> m;
	for (int i = 0; i < n; i++)
	{
		cin >> s[i];
		for (int j = 0; j < m; j++)
		{
			cnt1[i][s[i][j]-'a']++;
			cnt2[j][s[i][j]-'a']++;
		}
	}
	while (1)
	{
		vector<int> r, c;
		for (int i = 0; i < n; i++)
		{
			if (f1[i] == 0)
			{
				int cnt = 0, sum = 0;
				for (int j = 0; j < 26; j++)
				{
					if (cnt1[i][j])
					{
						cnt++;
						sum += cnt1[i][j];
					}
				}
				if (cnt == 1 && sum >= 2)
				{
					r.push_back(i);
				}
			}
		}
		for (int i = 0; i < m; i++)
		{
			if (f2[i] == 0)
			{
				int cnt = 0, sum = 0;
				for (int j = 0; j < 26; j++)
				{
					if (cnt2[i][j])
					{
						cnt++;
						sum += cnt2[i][j];
					}
				}
				if (cnt == 1 && sum >= 2)
				{
					c.push_back(i);
				}
			}
		}
		int lenr = r.size();
		int lenc = c.size();
		if (r.size() == 0 && c.size() == 0)
		{
			break;
		}
		for (int i = 0; i < r.size(); i++)
		{
			f1[i] = 1;
			for (int j = 0; j < m; j++)
			{
				if (s[i][j] != '#')
				{
					s[i][j] = '#';
					cnt1[i][s[i][j]-'a']--;
				}
			}
		}
		for (int i = 0; i < c.size(); i++)
		{
			f2[i] = 1;
			for (int j = 0; j < n; j++)
			{
				if (s[j][i] != '#')
				{
					s[j][i] = '#';
					cnt1[i][s[j][i]-'a']--;
				}
			}
		}
		r.clear();
		c.clear();
	}
	int ans = 0;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (s[i][j] != '#')
			{
				ans++;
			}
		}
	}
	cout << ans;
	return 0;
}
2024/7/5 13:10
加载中...