洛谷-2822

洛谷-2652

key

思路

有个mod k的想法很好,然后就是对于一遍一遍的询问进行前缀和优化,但有个问题就是算出来的s矩阵最开始是个下三角矩阵,但是根据前缀和公式来看,s[i][j]上方的s[i - 1][j]就是空的,而不是我们需要的值,所以要在第i行结束时,对s[i][i + 1]进行特别赋值。

// #include <bits/stdc++.h>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <unordered_map>
#include <map>
#include <set>
#include <cctype>
#include <list>
#include <bitset>
#define dbg(x) cout << #x << " = " << x << "\n"
using namespace std;
#define cf int _o_o_;cin>>_o_o_;for (int Case = 1; Case <= _o_o_;Case++)
#define SZ(x) (int)(x.size())
inline void solve();
int main() {solve();return 0;}
 
using ll = long long;
const int maxn = 2010;

int c[maxn][maxn];

ll s[maxn][maxn];
 
inline void solve() {
    int t, k;
    cin >> t >> k;
    c[0][0] = 1;
    for (int i = 1;i <= 2000;i++) {
        c[i][0] = 1;
    }
    for (int i = 1;i <= 2000;i++) {
        for (int j = 1;j <= i;j++) {
            c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % k;
            if (c[i][j] == 0) s[i][j] = 1;
        }
    }
    for (int i = 1;i <= 2000;i++) {
        for (int j = 1;j <= i;j++) {
            s[i][j] += s[i][j - 1] + s[i - 1][j] - s[i - 1][j - 1];
        }
        s[i][i + 1] = s[i][i];
    }
    while (t -- ) {
        int n, m;
        cin >> n >> m;
        if (m > n) cout << s[n][n] << "\n";
        else cout << s[n][m] << "\n";
    }
}
posted @   Uzhia  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示