それっぽい位置を正方形の角と決めて、各点が含まれるか調べる。
文字列で記憶するのが少し不安だったけど、問題なかった。
- class SquaredSubsets {
- public:
- long long countSubsets(int n_, vector <int> x_, vector <int> y_)
- {
- double n = n_;
- vector<double> x, y;
- for (int i = 0; i < x_.size(); ++i) {
- x.push_back(x_[i]);
- y.push_back(y_[i]);
- }
- const int N = x.size();
- const double eps = 1e-4;
- const int D = 9;
- double dx[D] = {0, 0, 0, -eps, -eps, -eps, eps, eps, eps};
- double dy[D] = {-eps, 0, eps, -eps, 0, eps, -eps, 0, eps};
- set<string> P;
- P.insert("");
- for (int i = 0; i < N; ++i) {
- for (int j = 0; j < N; ++j) {
- for (int d = 0; d < D; ++d) {
- const double X = x[i] + dx[d];
- const double Y = y[j] + dy[d];
- string a, b, c, d;
- for (int k = 0; k < N; ++k) {
- if (X <= x[k] && x[k] <= X + n && Y <= y[k] && y[k] <= Y + n) {
- a += k + ((k < 26) ? 'A' : 'a');
- }
- if (X - n <= x[k] && x[k] <= X && Y - n <= y[k] && y[k] <= Y) {
- b += k + ((k < 26) ? 'A' : 'a');
- }
- if (X <= x[k] && x[k] <= X + n && Y - n <= y[k] && y[k] <= Y) {
- c += k + ((k < 26) ? 'A' : 'a');
- }
- if (X - n <= x[k] && x[k] <= X && Y <= y[k] && y[k] <= Y + n) {
- d += k + ((k < 26) ? 'A' : 'a');
- }
- }
- sort(a.begin(), a.end());
- sort(b.begin(), b.end());
- sort(c.begin(), c.end());
- sort(d.begin(), d.end());
- P.insert(a);
- P.insert(b);
- P.insert(c);
- P.insert(d);
- }
- }
- }
- return (int)P.size() - 1;
- }
- };
0 件のコメント :
コメントを投稿