Submission #1364549

#TimeUsernameProblemLanguageResultExecution timeMemory
1364549SuvdChika Wants to Cheat (EGOI22_cheat)C++20
0 / 100
0 ms344 KiB
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

typedef pair<int, int> Point;
typedef pair<Point, Point> Edge;

// Цэгийг 90 градус эргүүлэх (x, y) -> (2-y, x)
Point rotatePoint(Point p) {
    return {2 - p.second, p.first};
}

// Хэрчмийг эргүүлэх ба цэгүүдийг эрэмбэлэх
Edge rotateEdge(Edge e) {
    Point a = rotatePoint(e.first);
    Point b = rotatePoint(e.second);
    if (a > b) swap(a, b);
    return {a, b};
}

// Бүх 32 зөв хэрчмийг үүсгэх
vector<Edge> get_all_edges() {
    vector<Edge> edges;
    for (int x1 = 0; x1 <= 2; ++x1)
        for (int y1 = 0; y1 <= 2; ++y1)
            for (int x2 = 0; x2 <= 2; ++x2)
                for (int y2 = 0; y2 <= 2; ++y2) {
                    if (make_pair(x1, y1) >= make_pair(x2, y2)) continue;
                    int dx = abs(x1 - x2), dy = abs(y1 - y2);
                    if (__gcd(dx, dy) == 1) { // "Зөв" хэрчим
                        edges.push_back({{x1, y1}, {x2, y2}});
                    }
                }
    return edges;
}

// Дүрсийг 64-бит тоо (bitmask) болгож хөрвүүлэх замаар n-ийг илэрхийлэх
// Дэд бодлого 5, 6, 7-д зориулж bitmask ашиглах нь тохиромжтой.
// Гэхдээ 32 бит нь 4 тэрбум боломж тул n-ийг шууд битээр хадгалж болно.

vector<Edge> BuildPattern(int n) {
    vector<Edge> all = get_all_edges();
    vector<Edge> result;
    
    // n-ийг "эргүүлэлтэд тэсвэртэй" болгохын тулд 
    // n-ийг тодорхой битүүдэд тарааж байрлуулна.
    // Энгийн хувилбар: 26 бит ашиглан (n) дүрсийг бүтээх
    for (int i = 0; i < 30; i++) {
        if ((n >> i) & 1) {
            result.push_back(all[i]);
        }
    }
    // Тусгай тэмдэг: (0,0)-(1,2) гэх мэт эргэхэд давтагдахгүй хэрчмийг 
    // чиглэл тогтооход ашиглаж болно.
    return result;
}

int GetCardNumber(vector<Edge> p) {
    vector<Edge> all = get_all_edges();
    // Эргүүлэлт бүрийг шалгаж, анхны n-ийг сэргээх логик энд орно.
    // ... (Эргүүлэлтийн 4 хувилбарыг туршиж үзээд, зөв n-ийг олох)
    return 0; // Жишээ
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...