Contest - Nhân ma trận 5

Các bài

Đề bài Điểm Tỷ lệ AC Thành viên
Cảm xúc ngẫu nhiên 30 100,0% 6
Đếm đường đi 30 66,7% 6
Đường đi quân mã 30 30,8% 4
Bài toán FIB3 30 66,7% 4
Dãy Fibonacci - VOI17 30 40,0% 4

Kỳ thi này không tính rating.

  • Kỳ thi này không yêu cầu bạn phải đúng hết bộ test của một bài để có điểm.
  • Kỳ thi này không sử dụng pretest.
  • Kỳ thi này không giới hạn số lần nộp bài.

Kỳ thi sử dụng format ICPC.

  • Điểm của bài sẽ là điểm của lần nộp bài có điểm lớn nhất.
  • Các lần nộp bài trước lần nộp bài có điểm lớn nhất sẽ tính penalty 20 phút.
  • Các thí sinh bằng điểm sẽ được phân định bằng tổng thời gian của lần nộp bài cuối cùng làm thay đổi kết quả trong các bài tập có điểm lớn hơn 0 (cộng với penalty). Nếu vẫn bằng nhau, phân định bằng thời gian của lần nộp bài cuối cùng làm thay đổi kết quả.

Bảng điểm được hiển thị trong quá trình diễn ra kỳ thi.


const int MOD = 1e9+7;

typedef long long ll;

ll mulmod(ll a, ll b){
    ll m = MOD;
    ll ret = a*b - m*ll(1.L/m*a*b);
    return ret + m*(ret < 0) - m*(ret >= ll(m));
}

void add(int &a, const int &b) {
    a += b;
    if (a >= MOD) a -= MOD;
    if (a < 0) a += MOD;
}

struct Matrix {
    vector <vector<int>> value;
    int rows, cols;
    Matrix(const vector<vector<int>> &d): value(d) { 
        rows = d.size();
        cols = d[0].size();
    };

    Matrix(int r, int c) {
        rows = r;
        cols = c;
        value.resize(rows, vector<int>(cols, 0));
    }

    vector<int>& operator[](int i) {return value[i];}

    static Matrix identity(int n) {
        Matrix a = Matrix(n, n);
        while (n--) a.value[n][n] = 1;
        return a;
    }

    void print() {
        for (int i=0; i<rows; i++) {
            for (int j=0; j<cols; j++) cout << value[i][j] << " ";
            cout << endl;
        }
    }

    Matrix operator * (const Matrix &b) {
        Matrix a = *this;
        Matrix c = Matrix(a.rows, b.cols);
        for (int i=0; i<a.rows; i++) {
            for (int j=0; j<b.cols; j++) {
                for (int k=0; k<a.cols; k++) add(c.value[i][j], mulmod(a.value[i][k]%MOD, b.value[k][j]%MOD));
            }
        }
        return c;
    }

    Matrix pow(int k) {
        Matrix x = *this, ans = identity(rows);
        for (; k > 0; k >>= 1, x = x*x) if (k & 1) ans = ans * x;
        return ans;
    }
};

Nhận xét

Không có ý kiến tại thời điểm này.