Mocha and Stars

题意

给定 \(n,m\) ,问符合下定条件的数列有多少个:

  • 对于\(a_i(1\le i\le n)\),\(a_i\in [l_i,r_i]\cap \mathbb{Z}\)
  • \(\sum_{i=1}^ma_i\le m\)
  • \(\gcd(a_1,a_2,...a_n)=1\)

答案对 \(998\ 244\ 353\) 取模。

题解

倘若没有第二个条件,和这题就差不多了。第二个问题显然是个多重背包问题,所以我们把那题的代码稍微改一下,就能得出正确答案了。

每次要解决的子问题是这样的一个和原问题几乎一致的问题:

给定 \(n,m\) ,问符合下定条件的数列有多少个:

  • 对于\(a_i(1\le i\le n)\),\(a_i\in [l_i,r_i]\cap \mathbb{Z}\)
  • \(\sum_{i=1}^ma_i\le m\)

其中,\(\gcd(a_1,a_2,...,a_n)=d\), \(d\) 是我们枚举的 \(\gcd\) 。容易发现,把这里的所有数全都除以 \(d\) ,就变成了这么个问题:

给定 \(n,m\) ,问符合下定条件的数列有多少个:

  • 对于\(a_i(1\le i\le n)\),\(a_i\in [\lceil l_i/d\rceil,\lfloor r_i/d \rfloor]\cap \mathbb{Z}\)
  • \(\sum_{i=1}^ma_i\le m/d\)

当成一个普通的前缀和优化的多重背包问题即可。

AC代码

#include <bits/stdc++.h>

#define IO ios::sync_with_stdio(NULL)
#define sc(z) scanf("%lld", &(z))
#define _ff(i, a, b) for (ll i = a; i <= b; ++i)
#define _rr(i, a, b) for (ll i = b; i >= a; --i)
#define _f(i, a, b) for (ll i = a; i < b; ++i)
#define _r(i, a, b) for (ll i = b - 1; i >= a; --i)
#define mkp make_pair
#define endl "\n"
#define pii pair<int,int>
#define fi first
#define se second
#define lowbit(x) x&(-x)
#define pb push_back using namespace std;
typedef double db;
typedef long long ll;
typedef long double ld; const int N = 50 + 5;
const ll M = 1e5 + 5;
const ll mod = 998244353;
const int inf = 1e9;
const double eps = 1e-9;
const double PI = acos(-1.0);
const pii NIL = {0,0}; int n, m;
ll l[N], r[N], dp[M], sum[M], f[M]; ll deal(ll d) {
ll lim=m/d;
f[0]=1;_ff(i,1,lim)f[i]=0;
_ff(i,1,n){
ll L=(l[i]+d-1)/d,R=r[i]/d;
if(L>R)return 0;
sum[0]=f[0];
_ff(j,1,lim)sum[j]=(f[j]+sum[j-1])%mod;
_ff(j,0,lim){
if(j>R)f[j]=(sum[j-L]-sum[j-R-1]+mod)%mod;
else if(j>=L)f[j]=sum[j-L];
else f[j]=0;
}
}
ll ans=0;
_ff(i,1,lim)ans=(ans+f[i])%mod;
return ans;
} void solve() {
cin>>n>>m;
_ff(i,1,n)cin>>l[i]>>r[i];
_rr(d,1,M){
dp[d]=deal(d);
for(int i=d+d;i<=M;i+=d)dp[d]=(dp[d]-dp[i]+mod)%mod;
}
cout<<dp[1]<<endl;
} int main() {
// IO;
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif // !ONLINE_JUDGE // pre();ll T; cin>>T;
// _f(i,0,T) {
// // cout<<"Case "<<i+1<<": ";
// solve();
// } solve(); return 0;
}

Mocha and Stars的更多相关文章

  1. poj 2352 Stars 数星星 详解

    题目: poj 2352 Stars 数星星 题意:已知n个星星的坐标.每个星星都有一个等级,数值等于坐标系内纵坐标和横坐标皆不大于它的星星的个数.星星的坐标按照纵坐标从小到大的顺序给出,纵坐标相同时 ...

  2. 测试框架Mocha与断言expect

    测试框架Mocha与断言expect在浏览器和Node环境都可以使用除了Mocha以外,类似的测试框架还有Jasmine.Karma.Tape等,也很值得学习. 整个项目源代码: 为什么学习测试代码? ...

  3. [译]Testing Node.js With Mocha and Chai

    原文: http://mherman.org/blog/2015/09/10/testing-node-js-with-mocha-and-chai/#.ViO8oBArIlJ 为什么要测试? 在此之 ...

  4. JavaScript测试工具比较: QUnit, Jasmine, and Mocha

    1. QUnit A JavaScript Unit Testing framework. QUnit is a powerful, easy-to-use JavaScript unit testi ...

  5. 【Mocha.js 101】钩子函数

    前情提要 在上一篇文章<[Mocha.js 101]同步.异步与 Promise>中,我们学会了如何对同步方法.异步回调方法以及 Promise 进行测试. 在本篇文章中,我们将了解到 M ...

  6. 【Mocha.js 101】同步、异步与 Promise

    前情提要 在上一篇文章<[Mocha.js 101]Mocha 入门指南>中,我们提到了如何用 Mocha.js 进行前端自动化测试,并做了几个简单的例子来体验 Mocha.js 给我们带 ...

  7. 【Mocha.js 101】Mocha 入门指南

    序 说到质量控制,不得不提起测试驱动开发(TDD)和行为驱动开发(BDD).随着敏捷软件开发的推行,软件质量控制的重担也逐渐从测试工程师转向了研发工程师.测试驱动也随之悄然而生,成为了敏捷开发中重要的 ...

  8. 基于Grunt&Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)

    Introduction Grunt 是一个基于任务的JavaScript 世界的构建工具 Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异 ...

  9. 如何在Chrome下Debug Mocha的测试

    简介 经过前两篇文章的介绍,相信读者对Mocha应该有一定的认知了,本文重点讲述如何在Chrome下Debug Mocha Test, 方便你在测试fail的时候troubleshooting. 关键 ...

  10. 带你入门带你飞Ⅱ 使用Mocha + Chai + SuperTest测试Restful API in node.js

    目录 1. 简介 2. 准备开始 3. Restful API测试实战 Example 1 - GET Example 2 - Post Example 3 - Put Example 4 - Del ...

随机推荐

  1. 实验5:开源控制器实践POX

    一.基础实验 建立拓扑: sudo mn --topo=single,3 --mac --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk, ...

  2. JWT 工具类的编写

    导入JWT pom依赖 <!--JWT 依赖--><dependency> <groupId>io.jsonwebtoken</groupId> < ...

  3. 组件中的data为什么不是一个对象而是一个函数?

    组件中的data为什么不是一个对象而是一个函数? 组件是可复用的vue实例,一个组件被创建好之后,就可能被用在各个地方,而组件不管被复用了多少次,组件中的data数据都应该是相互隔离,互不影响的,基于 ...

  4. python打包生成exe报错

    如图所示    如果出现的是这个问题可以可以考虑以下方法 首先卸载原先下载的 Pyinstaller pip uninstall pyinstaller 再执行以下代码,去github上下载 pip ...

  5. go - 泛型

    为什么要用泛型 在 go 1.18 前的版本中,如果对传入参数的值不确定时,就要使用空接口的方法传参,然后通过对参数进行断言的方式,取出原结构体. 对泛型切片进行遍历 func printSlice[ ...

  6. webpack5用url-loader(file-loader)处理图片和img-loader压缩图片

    webpack-cli 4.0的版本和 webpack-dev-server 3.11.0的版本不兼容,只能用webpack@5.0 + webpack-cli@3.3.12 + webpack-de ...

  7. MxDraw云图平台 2022.08.24更新

    SDK开发包下载地址: https://www.mxdraw.com/ndetail_30187.html 1. 增加对像扩展数据功能 2. 增加CAD GIS使用功能 https://www.mxd ...

  8. 批量统一调整PDF页面尺寸大小

    先合并所有PDF页面到同一个文件 使用福昕PDF编辑版打开合并后的文件,选择打印功能,选择福昕虚拟打印机,打印处理器选择"比例"模式 打印并保存文件 检查新文件各页面是否大小一致并 ...

  9. P5731 蛇形方阵

    P5731 [深基5.习6]蛇形方阵 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) //为什么用动态二维数组 --->To play to user's input, but ...

  10. win11恢复完整右键菜单

    使用注册表修改 首先,通过修改注册表,我们就可以将 Win11 的右键菜单改为老样式.下面是具体的方法. 运行"regedit",开启注册表编辑器,定位到"HKEY_CU ...