中国石油大学ACM俱乐部开放训练赛---问题 K: 数学问题(预处理 + 二维前缀和)

问题 K: 数学问题

时间限制: 1 Sec  内存限制: 128 MB
提交: 381  解决: 24
[状态] [提交] [命题人:外部导入]

题目描述

我们高中曾经学过何为组合数。 那么,给出整数n,m,g,聪明的你能否求出有多少整数对(i,j),满足g整除吗?(其中0≤i≤n,0≤j≤min(i,m))。 (提示:n!=1×2×⋯×n;特别地,0!=1。)

输入

第一行一个整数T(T<=104 ),表示测试数据的组数;
第二行一个整数g(1<g<=25);
接下来T行每行两个整数n,m(n,m<=2000);
n,m,g的意义见题目描述。

 

输出

输出T行,每行一个整数,表示有多少对整数对(i,j)满足g整除(0≤i≤n,0≤j≤min(i,m))。

样例输入 Copy

1
4
5 4

样例输出 Copy

2

利用二维前缀和 s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1],将(n,m)范围内整数对对数预先打表出来,把每次查询优化到 O(1)。

坑点:n 有可能 < m

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int N = 2e3 + 10;

ll a[N][N];
ll sum[N][N];
ll g;

void init()
{
    memset(a, 0, sizeof(a));
    a[0][0] = 1;
    for(int i = 1; i < N; ++i)
    {
        a[i][0] = 1;
        a[i][i] = 1;
        for(int j = 1; j < i; ++j)
        {
            a[i][j] = ((a[i - 1][j] % g) + (a[i - 1][j - 1] % g)) % g;
        }
    }
}

void solve()
{
    memset(sum, 0, sizeof(sum));
    for(int i = 1; i < N; ++i)
    {
        for(int j = 1; j <= i; ++j)
        {
            sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];
            if(a[i][j] == 0)
            {
                sum[i][j]++;
            }
        }
        sum[i][i + 1] = sum[i][i];
    }
}

int main()
{
    int n, t, m;
    while(~scanf("%d", &t))
    {
        scanf("%lld", &g);
        init();
        solve();
        while(t--)
        {
            scanf("%d%d", &n, &m);
            if(n < m)
                m = n;
            cout<<sum[n][m]<<'\n';
        }
    }
    return 0;
}

 

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
6395次浏览 61人参与
# 你的实习产出是真实的还是包装的? #
1304次浏览 32人参与
# 巨人网络春招 #
11213次浏览 223人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7077次浏览 37人参与
# 简历第一个项目做什么 #
31329次浏览 315人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186521次浏览 1115人参与
# 米连集团26产品管培生项目 #
4719次浏览 206人参与
# 研究所笔面经互助 #
118787次浏览 577人参与
# 面试紧张时你会有什么表现? #
30416次浏览 188人参与
# 简历中的项目经历要怎么写? #
309572次浏览 4163人参与
# 职能管理面试记录 #
10722次浏览 59人参与
# AI时代,哪些岗位最容易被淘汰 #
62719次浏览 748人参与
# 网易游戏笔试 #
6374次浏览 83人参与
# 把自己当AI,现在最消耗你token的问题是什么? #
6993次浏览 154人参与
# 腾讯音乐求职进展汇总 #
160437次浏览 1107人参与
# 从哪些方向判断这个offer值不值得去? #
56712次浏览 357人参与
# 正在春招的你,也参与了去年秋招吗? #
362741次浏览 2632人参与
# 你怎么看待AI面试 #
179417次浏览 1182人参与
# 小红书求职进展汇总 #
226905次浏览 1357人参与
# 你的房租占工资的比例是多少? #
92146次浏览 896人参与
# 校招笔试 #
467654次浏览 2954人参与
# 经纬恒润求职进展汇总 #
155713次浏览 1085人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务