类欧几里德算法(洛谷 P5170
- #include <iostream>
- #include <cstdio>
- #include <queue>
- #include <algorithm>
- #include <cmath>
- #include <cstring>
- #define inf 2147483647
- #define P 998244353
- #define p(a) putchar(a)
- #define For(i,a,b) for(long long i=a;i<=b;++i)
- using namespace std;
- long long T;
- long long n,a,b,c;
- long long i2 = , i6 = ;//这是2,6在%P意义下的逆元
- struct data{
- long long f,g,h;
- data calc(long long n,long long a,long long b,long long c){
- long long ac = a / c, bc = b / c, m = (a * n + b) / c, n1 = n + , n21 = n * + ;
- data d;
- if (a == ) {
- d.f = bc * n1 % P;
- d.g = bc * n % P * n1 % P * i2 % P;
- d.h = bc * bc % P * n1 % P;
- return d;
- }
- if (a >= c || b >= c){
- d.f = n * n1 % P * i2 % P * ac % P + bc * n1 % P;
- d.g = ac * n % P * n1 % P * n21 % P * i6 % P + bc * n % P * n1 % P * i2 % P;
- d.h = ac * ac % P * n % P * n1 % P * n21 % P * i6 % P +
- bc * bc % P * n1 % P + ac * bc % P * n % P * n1 % P;
- d.f %= P, d.g %= P, d.h %= P;
- data e = calc(n, a % c, b % c, c);
- d.h += e.h + * bc % P * e.f % P + * ac % P * e.g % P;
- d.g += e.g, d.f += e.f;
- d.f %= P, d.g %= P, d.h %= P;
- return d;
- }
- data e = calc(m - , c, c - b - , a);
- d.f = n * m % P - e.f, d.f = (d.f % P + P) % P;
- d.g = m * n % P * n1 % P - e.h - e.f, d.g = (d.g * i2 % P + P) % P;
- d.h = n * m % P * (m + ) % P - * e.g - * e.f - d.f;
- d.h = (d.h % P + P) % P;
- return d;
- }
- }ans;
- void in(long long &x){
- long long y=;char c=getchar();x=;
- while(c<''||c>''){if(c=='-')y=-;c=getchar();}
- while(c<=''&&c>=''){ x=(x<<)+(x<<)+c-'';c=getchar();}
- x*=y;
- }
- void o(long long x){
- if(x<){p('-');x=-x;}
- if(x>)o(x/);
- p(x%+'');
- }
- signed main(){
- in(T);
- while(T--){
- in(n);in(a);in(b);in(c);
- ans=ans.calc(n,a,b,c);
- o(ans.f);p(' ');o(ans.h);p(' ');o(ans.g);p('\n');
- }
- return ;
- }
类欧几里德算法(洛谷 P5170的更多相关文章
- Luogu4433:[COCI2009-2010#1] ALADIN(类欧几里德算法)
先套用一个线段树维护离散化之后的区间的每一段的答案 那么只要考虑怎么下面的东西即可 \[\sum_{i=1}^{n}(A\times i \ mod \ B)\] 拆开就是 \[\sum_{i=1}^ ...
- 差分约束算法————洛谷P4878 [USACO05DEC] 布局
题目: 不难看出题意主要是给出ml+md个格式为xi-xj<=ak的不等式,xi-xj为i,j俩头牛的距离,要我们求x1-xn的最大值. 经过上下加减我们可以将这几个不等式化成x1-xn< ...
- 洛谷P5170 【模板】类欧几里得算法(数论)
传送门 此题剧毒,公式恐惧症患者请直接转去代码→_→ 前置芝士 基本数论芝士 题解 本题就是要我们求三个函数的值 \[f(a,b,c,n)=\sum_{i=0}^n \left\lfloor\frac ...
- UOJ#42. 【清华集训2014】Sum 类欧几里德算法
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ42.html 题解 首先我们把式子改写一下: $$(-1)^{\lfloor a\rfloor} \\=1 ...
- 2018牛客网暑假ACM多校训练赛(第十场)H Rikka with Ants 类欧几里德算法
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-H.html 题目传送门 - https://www.n ...
- BZOJ2987:Earthquake(类欧几里德算法)
Sol 设 \(n=\lfloor\frac{c}{a}\rfloor\) 问题转化为求 \[\sum_{i=0}^{n}\lfloor\frac{c-ax}{b}\rfloor+1=\sum_{i= ...
- 洛谷 P3805 【模板】manacher算法
洛谷 P3805 [模板]manacher算法 洛谷传送门 题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入格式 一行小写英文字符 ...
- 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...
- 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码
洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...
随机推荐
- ArcGIS中QueryTask,FindTask,IndentifyTask 之间的区别
1:QueryTask是一个进行空间和属性查询的功能类,它可以在某个地图服务的某个子图层内进行查询,顺便需要提一下的是,QueryTask进行查询的地图服务并 不必项加载到Map中进行显示.Query ...
- RTC, Real Time Clock
配置 写入RTC_PRL, RTC_CNT, RTC_ALR寄存器时,需要先进入配置模式,通过把RTC_CRL寄存器的CNF位置一. 另外,在每次配置一个寄存器时必须等待上一次配置完成,可以通过检测R ...
- 剑指offer——33分行从上到下打印二叉树
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题解: 使用BFS,按层打印即可 class Solution { public: vector<vector&l ...
- numpy基本函数
在学习python的时候常常需要numpy这个库,每次都是用一个查一个,这个,终于见到一个完整的总结了http://blog.csdn.net/blog_empire/article/details/ ...
- go 数据类型和操作符
文件名&关键字&标识符 1. 所有go源码以 .go结尾 2. 标识符以字母或者下划线开头,大小写敏感:add, Add, _add _是特殊标识符,用来忽略结果 3. 保留关键字 G ...
- java oop第09章_JDBC02(CRUD操作)
第09章_JDBC02(CRUD操作) CRUD(CREATE . RETIVE . UPDATE . DELETE)增删改查. DAO中会提供一些CRUD操作方法,调用者可以通过调用这些方法完成相应 ...
- JS对象 向下取整floor() floor() 方法可对一个数进行向下取整。 语法: Math.floor(x)
向下取整floor() floor() 方法可对一个数进行向下取整. 语法: Math.floor(x) 参数说明: 注意:返回的是小于或等于x,并且与 x 最接近的整数. 我们将在不同的数字上使用 ...
- Windows服务调试状态下用Console启动
最近一直在用服务,发现服务也没有那么难调试. Windows服务调试状态下用Console启动:步骤分两步 第一步改Program,启动代码 static class Program { /// &l ...
- STL之__ type_traits
__type_traits:双底线是说明这是SGI STL内部使用的东西,不在STL标准范围之内.iterator_traits负责萃取迭代器(iterator)的特性.而__type_traits则 ...
- [190308]Ubuntu 安装完之后,安装的软件小记
install software vim sudo apt-get install -y vim Typora command copy from Typora website # or run: # ...