Submission #599989

#TimeUsernameProblemLanguageResultExecution timeMemory
599989JomnoiScissors and Tape (CEOI19_scissors)C++17
0 / 100
1 ms212 KiB
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;

int id, X1, X2, Y1, Y2;
int nowx, nowy;
vector <pair <int, int>> points, require;
vector <vector <pair <int, int>>> shapes;
vector <int> idlist;

void scissors(int idA, vector <vector <pair <int, int>>> remains) {
    cout << "scissors\n";
    cout << idA << ' ' << remains.size() << '\n';

    shapes.pop_back();
    idlist.pop_back();
    nowx = 0;
    nowy = 0;
    for(auto shape : remains) {
        cout << shape.size() << ' ';
        for(auto [x, y] : shape) {
            cout << x << ' ' << y << ' ';
        }
        cout << '\n';

        for(auto &[x, y] : shape) {
            x -= nowx;
            y += nowy;
        }
        shapes.push_back(shape);

        id++;
        idlist.push_back(id);
        nowx += X2;
        nowy += Y1;
    }
}

void tape() {
    cout << "tape\n";
    cout << shapes.size() << ' ';
    for(auto i : idlist) {
        cout << i << ' ';
    }
    cout << '\n';
    for(auto shape : shapes) {
        cout << shape.size() << ' ';
        for(auto [x, y] : shape) {
            cout << x << ' ' << y << ' ';
        }
        cout << '\n';
    }
    cout << require.size() << ' ';
    for(auto [x, y] : require) {
        cout << x << ' ' << y << ' ';
    }
}

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);

    int N;
    cin >> N;

    while(N--) {
        int x, y;
        cin >> x >> y;

        points.emplace_back(x, y);
    }
    idlist.push_back(id);
    shapes.push_back(points);

    cin >> N;

    while(N--) {
        int x, y;
        cin >> x >> y;

        require.emplace_back(x, y);
    }

    X1 = points[2].x, Y1 = points[2].y;
    X2 = require[2].x, Y2 = require[2].y;

    vector <vector <pair <int, int>>> remains;
    remains.push_back({{0, 0}, {0, Y1}, {X2, Y1}, {X2, 0}});
    nowx = X2;
    while(X1 > X2) {
        remains.push_back({{nowx, 0}, {nowx, Y1}, {nowx + X2, Y1}, {nowx + X2, 0}});
        nowx += X2;
        X1 -= X2;
    }
    if(remains.size() > 1) {
        scissors(id, remains);
        tape();
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...