Mocha and Stars
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的更多相关文章
- poj 2352 Stars 数星星 详解
题目: poj 2352 Stars 数星星 题意:已知n个星星的坐标.每个星星都有一个等级,数值等于坐标系内纵坐标和横坐标皆不大于它的星星的个数.星星的坐标按照纵坐标从小到大的顺序给出,纵坐标相同时 ...
- 测试框架Mocha与断言expect
测试框架Mocha与断言expect在浏览器和Node环境都可以使用除了Mocha以外,类似的测试框架还有Jasmine.Karma.Tape等,也很值得学习. 整个项目源代码: 为什么学习测试代码? ...
- [译]Testing Node.js With Mocha and Chai
原文: http://mherman.org/blog/2015/09/10/testing-node-js-with-mocha-and-chai/#.ViO8oBArIlJ 为什么要测试? 在此之 ...
- JavaScript测试工具比较: QUnit, Jasmine, and Mocha
1. QUnit A JavaScript Unit Testing framework. QUnit is a powerful, easy-to-use JavaScript unit testi ...
- 【Mocha.js 101】钩子函数
前情提要 在上一篇文章<[Mocha.js 101]同步.异步与 Promise>中,我们学会了如何对同步方法.异步回调方法以及 Promise 进行测试. 在本篇文章中,我们将了解到 M ...
- 【Mocha.js 101】同步、异步与 Promise
前情提要 在上一篇文章<[Mocha.js 101]Mocha 入门指南>中,我们提到了如何用 Mocha.js 进行前端自动化测试,并做了几个简单的例子来体验 Mocha.js 给我们带 ...
- 【Mocha.js 101】Mocha 入门指南
序 说到质量控制,不得不提起测试驱动开发(TDD)和行为驱动开发(BDD).随着敏捷软件开发的推行,软件质量控制的重担也逐渐从测试工程师转向了研发工程师.测试驱动也随之悄然而生,成为了敏捷开发中重要的 ...
- 基于Grunt&Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)
Introduction Grunt 是一个基于任务的JavaScript 世界的构建工具 Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异 ...
- 如何在Chrome下Debug Mocha的测试
简介 经过前两篇文章的介绍,相信读者对Mocha应该有一定的认知了,本文重点讲述如何在Chrome下Debug Mocha Test, 方便你在测试fail的时候troubleshooting. 关键 ...
- 带你入门带你飞Ⅱ 使用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 ...
随机推荐
- DFS略思维题做题记录
洛谷:P4399 [JSOI2008]Blue Mary的职员分配 链接 代码: #include<iostream> using namespace std; int n,x,y,z,A ...
- The emulator process for AVD Pixel_4_XL_API_30 was killed 问题
转载请注明来源:https://www.cnblogs.com/Sherlock-L/p/14946317.html 问题: 因为工作关系接触到了Android Studio,新建了4和11系统的模拟 ...
- 无线网络技术 实验2 无线网络环境RSSI测试实验
1.实验目的与要求 ①.了解RSSI的概念和基本原理 ②.掌握RSSI测量过程和方法 ③.不同无线环境下RSSI值测量 2.实验仪器材料:个人计算机 Windows操作系统 个人热点 3.实验过程记录 ...
- WIN10操作系统如何利用无线网卡连接wifi再通过有线网卡共享网络给路由(双网卡)
首先有一台笔记本电脑,或者双网卡的电脑(wifi网卡 和 有线网卡) 找到两个个网卡,并重置他们的设置 然后同时选中,右单击选择桥接 桥接成功以后就可以用无线网卡连接wifi,然后把有线网口插上网线直 ...
- python 操作 ES 一、基础操作
示例代码环境 python:3.8 es:7.8.0环境安装 pip install elasticsearch==7.8.0 from elasticsearch import Elasticsea ...
- K8S-pod详解
目录: namespace六大类型 Pod基础概念 Pod两种使用方式 通常把Pod分为两类 Pod容器的分类 init的容器作用 镜像拉取策略(image PullPOlicy) 部署harbor创 ...
- eval()
s='12*2'd=eval(s)#字符串运算函数print(d) 结果: 24
- SpringBoot为什么这么火?
1. 总的设计原则是""默认大于配置"" 2. Starter机制,开箱即用,默认的配置和依赖都是默认加载的 3. SpringBoot是Spring的子类, ...
- tool script to convert back slash
Back slash is used in windows, which makes so many headache for me. Then an idea came to my mind. It ...
- window python 主函数 写 if __name__ == "__main__": 可以避免多进程等错误(训练yolov8时出现的)
训练yolov8时出现 类似以下错误: RunTimeError: An attempt has been made to start a new process before the current ...