4 条题解

  • 1
    @ 2024-10-3 9:23:47
    #include <bits/stdc++.h>
    using namespace std;
    using ull = unsigned long long;
    ull qpow(ull x, ull y){
    	ull res = 1;
    	while (y){
    		if (y & 1) res *= x;
    		x *= x;
    		y >>= 1;
    	}
    	return res;
    }
    ull C(ull n, int m){
    	if (n < m) return 0;
    	static ull num[70];
    	for (int i = 0; i < m; i++) num[i] = n - i;
    	for (int i = 1; i <= m; i++){
    		int x = i;
    		for (int j = 0; j < m && x > 1; j++){
    			int g = __gcd(num[j], (ull)x);
    			if (g > 1){
    				num[j] /= g;
    				x /= g;
    			}
    		}
    		assert(x == 1);
    	}
    	ull res = 1;
    	for (int i = 0; i < m; i++) res *= num[i];
    	return res;
    }
    ull C2[70][70], f[70][2][70];
    int m;
    void init(ull n){
        memset(f, 0, sizeof(f));
        f[60][0][0] = 1;
        for (int i = 0; i <= 63; i++)
            for (int j = 0; j <= i; j++)
                C2[i][j] = C(i, j);
        for (int i = 59; i >= 0; i--)
            for (int p : {0, 1})
                for (int j = 0; j <= 63; j++)
                    for (int num = 0; num < 2; num++){
                        if (!p && num > ((n >> i) & 1)) continue;
                        if (i == 0 && num) continue;
                        int p2 = p || num < ((n >> i) & 1);
                        for (int k = j; k <= 63; k++){
                            ull cur = k == j ? 1 : (i * (k - j) < 64 ? (1ull * num) << (i * (k - j)) : 0);
                            if (cur) f[i][p2][k] += f[i + 1][p][j] * C2[k][j] * cur;
                        }
                    }
    }
    ull n, ans;
    int main(){
    	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    	cin >> m >> n;
    	if (m < 64){
            init(n);
            ans += f[0][1][m];
        }
        n--;
        init(n--);
    	for (int j = 0; j <= min(m, 63); j++)
    		ans += C(m, j) * f[0][1][j];
    	cout << ans;
    	return 0;
    }
    

    信息

    ID
    3214
    时间
    200ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    15
    已通过
    2
    上传者