首页 > 其他分享 >abc205

abc205

时间:2023-10-24 14:44:25浏览次数:21  
标签:abc205 return ifac int ll fact mod

B - Permutation Check 16

检查给定数组是不是一个排列

C - POW 63

判断 \(a^c\) 和 \(b^c\) 谁大(int 范围,\(c\ge 1\),\(a,b\) 可能是负数)

c = c % 2 ? 1 : 2,然后特判相等的情况,最后直接做pow比较

D - Kth Excluded 713

给定无重复正序数组,多次询问不在数组中的第 \(k\) 小的正整数。\(a_i,k\le 1e18\)

预处理数组 \(c_i\) 表示 \(\le a_i\) 的合法数的数量。如果 \(k>c_n\),答案就是 \(a_n+(k-c_n)\);否则二分找第一个 \(\ge k\) 的 \(c_i\),因为是第一个满足的所以 \(a_{i-1}+1<a_i\),也就是说 \((a_{i-1},a_i)\) 中至少有一个数,答案就在其中,是 \(a_i-1-(c_i-k)\)

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e5 + 5;
ll n, q, a[N], c[N];
int main() {
    cin >> n >> q;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        c[i] = a[i] - i;
    }
    
    while (q--) {
        ll k; cin >> k;
        if (k > c[n]) cout << a[n] + k - c[n] << '\n';
        else {
            int i = lower_bound(c, c + n + 1, k) - c; // c[i] >= k
            cout << a[i] - 1 - (c[i] - k) << '\n';
        }
    }
    
    return 0;
}

E - White and Black Balls 2025

\(n\) 个白球和 \(m\) 个黑球排一排,要求对任意前缀,白球数量不超过黑球数量 \(+k\),问方案数。

跟卡特兰数推导方法一样,在网格上走。答案是 \(C_{n+m}^n - C_{n+m}^{n-k-1}\)

然后疯狂WA!注意特判 \(n>m+k\) 时无解

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

const int N = 2e6 + 5, mod = 1e9 + 7;
ll fact[N], ifac[N];

ll qmi(ll a, ll b) {
    ll s = 1;
    for (; b; b >>= 1) {
        if (b & 1) s = s * a % mod;
        a = a * a % mod;
    }
    return s;
}
ll comb(ll n, ll k) {
    if (n < k) return 0;
    return fact[n] * ifac[k] % mod * ifac[n - k] % mod;
}

int main() {
    fact[0] = 1;
    for (int i = 1; i < N; i++) fact[i] = fact[i - 1] * i % mod;
    ifac[N - 1] = qmi(fact[N - 1], mod - 2);
    for (int i = N - 1; i; i--) ifac[i - 1] = ifac[i] * i % mod;
    
    ll n, m, k;
    cin >> n >> m >> k;
    if (n > m + k) return cout << 0, 0; //特判
    cout << ((comb(n + m, n) - comb(n + m, n - k - 1)) % mod + mod) % mod;
    
    return 0;
}

标签:abc205,return,ifac,int,ll,fact,mod
From: https://www.cnblogs.com/wushansinger/p/17784767.html

相关文章

  • [ABC205E] White and Black Balls 题解
    WhiteandBlackBalls题目大意将\(n\)个白球,\(m\)个黑球排成一列,要求满足\(\foralli\in[1,n+m],w_i\leb_i+k\),问存在多少种排法。其中\(w_i\)表示第\(i\)个球前的白球数量,\(b_i\)表示第\(i\)个球前的黑球数量。思路分析我们可以将一种排法映射成一条从\((0,0)......
  • [ABC205F] Grid and Tokens 题解
    GridandTokens题目大意给定\(n\)个点和一个\(H\timesW\)的网格,每个点可以放置在\((A_i,B_i)\)到\((C_i,D_i)\)的矩形中或不放,每一行或一列只能放置一个点,求最多能放多少个点。思路分析首先看数据范围,再结合题目给的限制条件,容易发现这是一道网络流。考虑建图,因为......