main
黄海 2 years ago
parent d696edc571
commit 51a80b4b1a

@ -1,74 +1,94 @@
#include <bits/stdc++.h> #include <bits/stdc++.h>
const int N = 110; const int N = 110;
char a[N][N]; char a[N][N];
/*
4
abccddadca
2
aaa
*/
using namespace std; using namespace std;
const double eps = 1e-8;
int n;
struct Node { struct Node {
int x, y; int x, y;
char c; char c;
}; };
vector<Node> q; vector<Node> q;
/*
4
abccddadca
2
aaa
*/
/* /*
1 double 1 double
:sqrt(3) :sqrt(3)
sqrt(3) 1 sqrt(3) 1
n=4
3,3*sqrt(3)
:2,2*sqrt(3) : 2+2,2*sqrt(3)
:1,1*sqrt(3) : 1+2,1*sqrt(3) :1+2+2,1*sqrt(3)
:0,0 :0+2,0 :0+2+2,0 :0+2+2+2,0
ij
i1n=4
j1i
x=n-i + (j-1)*2
y=(n-i)*sqrt(3)
*/ */
int pf(int x) {
return x * x;
}
bool check(Node a, Node b, Node c) { bool check(Node a, Node b, Node c) {
// n - i + (j - 1) * 2, (n - i) * sqrt(3)
if (a.c != b.c || a.c != c.c || b.c != c.c) return false; if (a.c != b.c || a.c != c.c || b.c != c.c) return false;
// a与b之间距离 不等于 a与c之间距离
if (pf(a.x - b.x) + pf(a.y - b.y) * 3 != pf(a.x - c.x) + pf(a.y - c.y) * 3) return false;
// a与b之间距离 不等于 b与c之间距离
if (pf(a.x - b.x) + pf(a.y - b.y) * 3 != pf(b.x - c.x) + pf(b.y - c.y) * 3) return false;
return true; double ax = (n - a.x + (a.y - 1) * 2);
double bx = (n - b.x + (b.y - 1) * 2);
double cx = (n - c.x + (c.y - 1) * 2);
double ay = (n - a.x) * sqrt(3);
double by = (n - b.x) * sqrt(3);
double cy = (n - c.x) * sqrt(3);
double c1 = (ax - bx) * (ax - bx) + (ay - by) * (ay - by);
double c2 = (ax - cx) * (ax - cx) + (ay - cy) * (ay - cy);
double c3 = (bx - cx) * (bx - cx) + (by - cy) * (by - cy);
if (abs(c1 - c2) < eps && abs(c1 - c3) < eps && abs(c2 - c3) < eps) return true;
return false;
} }
int main() { int main() {
#ifndef ONLINE_JUDGE #ifndef ONLINE_JUDGE
freopen("ZhiMuSanJiaoXing.in", "r", stdin); freopen("ZhiMuSanJiaoXing.in", "r", stdin);
#endif #endif
int n;
cin >> n; cin >> n;
string s; string s;
cin >> s; cin >> s;
// 先把字符串存入char[][] // 先把字符串存入char[][]
int idx = 0; int idx = 0;
for (int i = 0; i < n; i++) // n行 for (int i = 1; i <= n; i++) // n行
for (int j = 0; j <= i; j++) // i列 for (int j = 1; j <= i; j++) // i列
a[i][j] = s[idx++]; a[i][j] = s[idx++];
// 把所有坐标记录下来 // 把所有序号记录下来
for (int i = 0; i < n; i++) { for (int i = 1; i <= n; i++)
for (int j = 0; j <= i; j++) { for (int j = 1; j <= i; j++)
q.push_back({n - 1 - i, j, a[i][j]}); q.push_back({i, j, a[i][j]});
// cout << "x=" << n - 1 - i << ",y=" << j << " " << a[i][j] << endl;
}
}
vector<char> res; vector<char> res;
// 在q数组中选择任意三个计算两两间距离是不是相等 // 在q数组中选择任意三个计算两两间距离是不是相等
for (int i = 0; i < q.size(); i++) for (int i = 0; i < q.size(); i++)
for (int j = i + 1; j < q.size(); j++) for (int j = i + 1; j < q.size(); j++)
for (int k = j + 1; k < q.size(); k++) { for (int k = j + 1; k < q.size(); k++)
if (check(q[i], q[j], q[k])) res.push_back(q[i].c); if (check(q[i], q[j], q[k])) res.push_back(q[i].c);
}
if (res.size() == 0)
// if (res.size() == 0) cout << "No Solution" << endl;
// cout << "No Solution" << endl; else {
// else { sort(res.begin(), res.end());
// sort(res.begin(), res.end()); for (char x : res) cout << x << endl;
// for (char x : res) cout << x << endl; }
// }
return 0; return 0;
} }
Loading…
Cancel
Save