zoukankan      html  css  js  c++  java
  • noi.ac #65 triangle

    这个题没有 (a), (b) 的时候就是一个简单的组合数。

    现在加上 (a), (b) 好像还是个组合数^^

    其实,找找规律就可以知道,对第 (n)(m) 列的数,(a) 被计算了 (n-m) 次,(b) 被计算了 (m-1) 次。

    但是这题的数据要求线性求逆元,反正我会。。

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const ll N = 1e5 + 10;
    const int mod = 1e9 + 9;
    ll t, n, m, a, b;
    ll mul[N], inv[N];
    template<class I>
    inline void rd(I &x) {
    	ll f = 1;
    	char c = getchar();
    	for(; c < '0' || c > '9'; c = getchar()) if(c == '-') f = -1;
    	for(x = 0; c >= '0' && c <= '9'; x = (x << 3) + (x << 1) + (c & 15), c = getchar());
    	x *= f;
    }
    ll ksm(ll a, ll b) {
    	ll res = 1;
    	while (b) {
    		if (b & 1) res = res * a % mod;
    		a = a * a % mod;
    		b >>= 1;
    	}
    	return res;
    }
    ll C(ll n, ll m) {
    	if (m > n) return 0;
    	ll res = inv[m] * inv[n-m] % mod;
    	res = res * mul[n] % mod;
    	return res;
    }
    int main() {
    	mul[0] = inv[0] = 1;
    	for (ll i = 1; i <= N; i++) mul[i] = mul[i - 1] * i % mod;
    	inv[N] = ksm(mul[N], mod - 2);
    	for (ll i = N - 1; i; i--) inv[i] = inv[i + 1] * (i + 1) % mod;
    	rd(t);
    	while (t--) {
    		rd(a), rd(b), rd(n), rd(m);
    		ll ans = C(n - 1, m - 1);
    		ans = ans * ksm(a, n - m) % mod;
    		ans = ans * ksm(b, m - 1) % mod;
    		printf("%d
    ", ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    leetcode 1. Two Sum
    leetcode 168. Excel Sheet Column Title
    [LeetCode] Water and Jug Problem 水罐问题
    leetcode 80 Remove Duplicates from Sorted Array II
    leetcode 239. Sliding Window Maximum
    文件处理
    python网络编程 之 twisted
    ICMP & ping & traceroute
    Java String 转整形
    Java 字符数字得到整数
  • 原文地址:https://www.cnblogs.com/11haonb/p/11620155.html
Copyright © 2011-2022 走看看