大家看一下这份代码,只有10分。。。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 505;
int n, m, ans;
string a[N], b[N];
unordered_map<string, bool> vis;
signed main()
{
cin >> n >> m;
for(int i = 1; i <= n; i++)
cin >> a[i]; // 有斑点
for(int i = 1; i <= n; i++)
cin >> b[i]; // 没斑点
for(int p1 = 0; p1 < m; p1++)
for(int p2 = p1 + 1; p2 < m; p2++)
for(int p3 = p2 + 1; p3 < m; p3++)
{
vis.clear();
for(int i = 1; i <= n; i++)
{
string tmp = "";
tmp += a[i][p1] + a[i][p2] + a[i][p3];
vis[tmp] = true;
}
for(int i = 1; i <= n; i++)
{
string tmp = "";
tmp += b[i][p1] + b[i][p2] + b[i][p3];
if(vis[tmp])
{
ans--;
break;
}
}
ans++;
}
cout << ans;
return 0;
}
离谱的来了,如果改成这样就 A 了:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 505;
int n, m, ans;
string a[N], b[N], kong = "";
unordered_map<string, bool> vis;
signed main()
{
cin >> n >> m;
for(int i = 1; i <= n; i++)
cin >> a[i]; // 有斑点
for(int i = 1; i <= n; i++)
cin >> b[i]; // 没斑点
for(int p1 = 0; p1 < m; p1++)
for(int p2 = p1 + 1; p2 < m; p2++)
for(int p3 = p2 + 1; p3 < m; p3++)
{
vis.clear();
for(int i = 1; i <= n; i++)
{
string tmp = kong + a[i][p1] + a[i][p2] + a[i][p3];
vis[tmp] = true;
}
for(int i = 1; i <= n; i++)
{
string tmp = kong + b[i][p1] + b[i][p2] + b[i][p3];
if(vis[tmp])
{
ans--;
break;
}
}
ans++;
}
cout << ans;
return 0;
}
其中,唯一的区别就是将
string tmp = "";
tmp += a[i][p1] + a[i][p2] + a[i][p3];
改成了:
string kong = "";
string tmp = kong + a[i][p1] + a[i][p2] + a[i][p3];
有哪位大佬能告诉我,这有什么区别QWQ