洛谷-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";
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App