正解:数论

解题报告:

传送门$QwQ$

我好像当初考的时候这题爆零了,,,部分分都没想到,,,我真的好菜$kk$

考虑如果在$t_1,t_2$两个时刻有$x_1=x_2,y_1=y_2$是什么情况$QwQ$?

那就有$\begin{cases}t_1+[\frac{t_1}{B}]\equiv t_2+[\frac{t_2}{B}](\mod A)\\t_1\equiv t_2(\mod B)\end{cases}$.

不妨设$t_2=t_1+B\cdot t$,代入得$t_1+[\frac{t_1}{B}]\equiv t_1+B\cdot k+[\frac{t_1+B\cdot k}{B}](\mod A)$,即$k(B+1)\equiv 0(\mod A)$

解得$\frac{A}{gcd(A,B+1)}|k$.即将$mod\ B$相等的提出来,发现每$\frac{A}{gcd(A,B+1)}$一循环.又因为$mod\ B$的结果有$B$个,所以总的循环节长度为$len=\frac{A\cdot B}{gcd(A,B+1)}$.

所以把$l,r$取模后变成若干条线段,然后现在询问$[0,len)$覆盖了多少个点.昂这个不差分下就行了嘛,$over$

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define fi first
#define sc second
#define ll long long
#define gc getchar()
#define mp make_pair
#define P pair<ll,ll>
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ll i=x;i<=y;++i)
#define my(i,x,y) for(ll i=x;i>=y;--i) const int N=1e6+;
const ll inf=1e18;
ll n,A,B,len,l[N],r[N],sum,dat,lst,as;
multiset<P>S; il ll read()
{
rc ch=gc;ll x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
il void ad(ll x,ll y){S.insert(mp(x,-));S.insert(mp(y,));} int main()
{
//freopen("5444.in","r",stdin);freopen("5444.out","w",stdout);
n=read();A=read();B=read();len=A/gcd(A,B+)*B;rp(i,,n){l[i]=read(),r[i]=read();sum+=r[i]-l[i]+;}
if(A/gcd(A,B+)>inf/B)return printf("%lld\n",sum),;
rp(i,,n)
{
if(r[i]-l[i]>=len)return printf("%lld\n",len),;;//printf("l=%lld r=%lld len=%lld\n",r[i],l[i],len);
if(l[i]/len!=r[i]/len)ad(l[i]%len,len-),ad(,r[i]%len);else ad(l[i]%len,r[i]%len);
}
multiset<P>::iterator it=S.begin();
while(it!=S.end()){P tmp=*it;if(!dat)lst=tmp.fi;dat-=tmp.sc;if(!dat)as+=tmp.fi-lst+;++it;}
printf("%lld\n",as);
return ;
}

最新文章

  1. redis + spring 集成
  2. C#设置字体(FontDIalog)、颜色(ColorDialog)对话框控件
  3. Unix Shell 程序设计 —— 正则表达式
  4. PHP基础课程学习总结
  5. zepto源码--init--学习笔记
  6. (转)TCP、UDP、IP协议
  7. js小技巧(二)
  8. 微软 Build 2014开发者大会干货整理-1
  9. [问题]编译报错:clang: error: linker command failed with exit code 1及duplicate symbol xxxx in错误解决方法之一
  10. 【DataStructure】Some useful methods for arrays
  11. 安卓主activity引用自定义的View——Android LayoutInflater原理分析
  12. 安装netcat(-bash: netcat: command not found)
  13. SecureCRT窗口输出代码关键字高亮设置
  14. Python集成开发工具Pycharm的使用方法:复制,撤销上一步....
  15. 网络编程——socket(四十三)
  16. 安装 Xshell 5/6 时出现.dll以及0xc000007错误的解决
  17. windows server core 远程桌面
  18. AndroidStudio查看无用的资源文件;
  19. hdu 5074 相邻数和最大dp
  20. 容器监控:cadvisor+influxdb+grafana

热门文章

  1. 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google
  2. 异常解决:non-compatible bean definition of same name and class【com.xxx.xxx.XXX】
  3. @NOI模拟2017.07.02 - T1@ Attack
  4. Bert源码阅读
  5. 字符串编辑距离(Edit Distance)
  6. jieba gensim 相似度实现
  7. HDU 1236
  8. axis2 wsdl2java工具
  9. 51nod1160 压缩算法的矩阵——一道有趣的题
  10. 【b703】矩阵取数游戏