屋稷删 发表于 2025-10-21 23:05:01

Say 题选记 (10.19 - 10.25)

P3702 序列计数

首先至少 1 个质数可以容斥成随便选 - 只选合数。然后注意到第二维很小,直接矩阵快速幂即可。
Code#include using namespace std;const int M = 2e7 + 5, K = 1e2 + 5, mod = 20170408;typedef long long ll;int n, m, p, pri, cnt;ll num, npri;bitset vis;void add(ll &x, ll y){ (x += y) %= mod;}struct matrix{        ll m;        matrix(){ memset(m, 0, sizeof(m)); }        matrix operator * (const matrix &x){                matrix ret;                for(int i = 0; i < p; ++i){                        for(int j = 0; j < p; ++j){                                for(int k = 0; k < p; ++k){                                        add(ret.m, m * x.m);                                }                        }                 }                 return ret;        }}a, b, f; void init(){        vis = 1;        for(ll i = 2; i >= 1, a = a * a){                if(b & 1) ret = ret * a;        }        return ret;}int main(){        cin.tie(nullptr)->sync_with_stdio(0);        cin >> n >> m >> p;        init();        for(int i = 1; i > n >> q;        inv = 1;        for(int i = 2; i < mod; ++i){                inv = ((mod - mod / i) * inv) % mod;        }        for(int i = 1; i > Op.typ;                if(Op.typ != 6){                        cin >> Op.x;                        if(Op.typ == 1) cin >> Op.k;                }        }        cin >> t;        for(int i = 1; i > x >> y;        int ans = 0;        for(int i = 1; i = 3){                b -= 3;                (ret += dfs(x, y + 1)) %= mod;                b += 3;        }        if(b >= 1 && b >= 1){                b--, b--;                (ret += dfs(x, y + 1)) %= mod;                b++, b++;        }        return ret;}int main(){        cin.tie(nullptr)->sync_with_stdio(0);        cin >> n;        for(int i = 1; i > b;        cout

昆拗干 发表于 2025-12-11 01:33:30

喜欢鼓捣这些软件,现在用得少,谢谢分享!
页: [1]
查看完整版本: Say 题选记 (10.19 - 10.25)