#3144. 「APIO 2019」奇怪装置
#3144. 「APIO 2019」奇怪装置
题目描述
考古学家发现古代文明留下了一种奇怪的装置。该装置包含两个屏幕,分别显示两个整数 \(x\) 和 \(y\)。
经过研究,科学家对该装置得出了一个结论:该装置是一个特殊的时钟,它从过去的某个时间点开始测量经过的时刻数 \(t\),但该装置的创造者却将 \(t\) 用奇怪的方式显示出来。若从该装置开始测量到现在所经过的时刻数为 \(t\),装置会显示两个整数:\(x = ((t + \lfloor \frac{t}{B} \rfloor) \bmod A)\),与 \(y = (t \bmod B)\)。这里 \(\lfloor x\rfloor\) 是下取整函数,表示小于或等于 \(x\) 的最大整数。
考古学家通过进一步研究还发现,该装置的屏幕无法一直工作。实际上,该装置的屏幕只在 \(n\) 个连续的时间区间段中能正常工作。第 \(i\) 个时间段从时刻 \(l_i\) 到时刻 \(r_i\)。现在科学家想要知道有多少个不同的数对 \((x, y)\) 能够在该装置工作时被显示出来。
两个数对 \((x_1, y_1)\) 和 \((x_2, y_2)\) 不同当且仅当 \(x_1 \not = x_2\) 或 \(y_1 \not = y_2\)。
输入格式
第一行包含三个整数 \(n, A\) 与 \(B\)。
接下来 \(n\) 行每行两个整数 \(l_i, r_i\),表示装置可以工作的第 \(i\) 个时间区间。
输出格式
输出一行一个整数表示问题的答案。
数据范围与提示
对于全部数据,\(1\le n\le 10^6,1\le A,B\le 10^{18},0\le l_i\le r_i\le 10^{18},r_i<l_{i+1}\)。
首先这玩意肯定是有环的。找到过后将所有线段平移到环内就可以直接做线段覆盖。
对于一个数\(t\),首先跟他同构的数可以表示为\(t+k*B\),因为要保证\(y\)相同。然后\(t\)每增加\(B\),\(x\)就增加\(B+1\),增加了\(\frac{A}{\gcd(A,B+1)}\)后有会同构。所以环大小\(\frac{B*A}{\gcd(A,B+1)}\)。
代码:
#include<bits/stdc++.h>
#define ll long long
#define N 1000005
using namespace std;
inline ll Get() {ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}
int n;
ll A,B,len;
struct node {
ll l,r;
bool operator <(const node &a)const {
if(l!=a.l) return l<a.l;
return r<a.r;
}
}s[N<<1];
ll gcd(ll a,ll b) {return !b?a:gcd(b,a%b);}
int main() {
n=Get(),A=Get(),B=Get();
for(int i=1;i<=n;i++) s[i].l=Get(),s[i].r=Get();
ll g=gcd(A,B+1);
ll ans=0;
if((long double)A/g*B>1e18) {
for(int i=1;i<=n;i++) ans+=s[i].r-s[i].l+1;
} else {
ll len=A/g*B;
int tot=n;
for(int i=1;i<=n;i++) {
if(s[i].r-s[i].l+1>=len) {
cout<<len;
return 0;
}
s[i].l%=len,s[i].r%=len;
if(s[i].l>s[i].r) {
s[++tot].l=0,s[tot].r=s[i].r;
s[i].r=len-1;
}
}
sort(s+1,s+1+tot);
ll last=-1;
for(int i=1;i<=tot;i++) {
if(s[i].r<last) continue ;
ans+=s[i].r-max(s[i].l-1,last);
last=s[i].r;
}
}
cout<<ans;
return 0;
}
#3144. 「APIO 2019」奇怪装置的更多相关文章
- 【LOJ #3144】「APIO 2019」奇怪装置
题意: 定义将一个\(t\)如下转换成一个二元组: \[ f(t) = \begin{cases} x = (t + \left\lfloor \frac{t}{B} \right \rfloor) ...
- 「APIO 2019」奇怪装置
题目 考虑推柿子 最开始的想法是如果两个\(t\)在\(mod\ B\)意义下相等,那么只需要比较一下\((t+\left \lfloor \frac{t}{B}\rfloor \right)mod\ ...
- #3146. 「APIO 2019」路灯
#3146. 「APIO 2019」路灯 题目描述 一辆自动驾驶的出租车正在 Innopolis 的街道上行驶.该街道上有 \(n + 1\) 个停车站点,它们将街道划分成了 \(n\) 条路段.每一 ...
- #3145. 「APIO 2019」桥梁
#3145. 「APIO 2019」桥梁 题目描述 圣彼得堡市内所有水路长度总和约 282 千米,市内水域面积占城市面积的 7%.--来自维基百科 圣彼得堡位于由 \(m\) 座桥梁连接而成的 \(n ...
- 「APIO 2019」桥梁
题目 三天终于把\(APIO\)做完了 这题还是比较厉害的,如果不知道这是个分块应该就自闭了 考虑一个非常妙的操作,按照操作分块 我们设一个闸值\(S\),把\(S\)个边权修改操作分成一块,把所有的 ...
- 「APIO 2019」路灯
题目 显然一个熟练的选手应该能一眼看出我们需要维护点对的答案 显然在断开或连上某一条边的时候只会对左右两边联通的点产生贡献,这个拿\(set\)维护一下就好了 那现在的问题就是怎么维护了 考虑一个非常 ...
- 「WC 2019」数树
「WC 2019」数树 一道涨姿势的EGF好题,官方题解我并没有完全看懂,尝试用指数型生成函数和组合意义的角度推了一波.考场上只得了 44 分也暴露了我在数数的一些基本套路上的不足,后面的 \(\ex ...
- LOJ#3054. 「HNOI 2019」鱼
LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想 ...
- 「UNR#1」奇怪的线段树
「UNR#1」奇怪的线段树 一道好题,感觉解法非常自然. 首先我们只需要考虑一次染色最下面被包含的那些区间,因为把无解判掉以后只要染了一个节点,它的祖先也一定被染了.然后发现一次染色最下面的那些区间一 ...
随机推荐
- DSP开发程序相关问题总结
1. 定义Class总是出错,原来是这样的class SCM_DRV_API CSERCOS{}:后来改为class CSERCOS{}:就可以了. 类的一般定义格式如下: class < ...
- 学习之Redis(二)
Redis的对象和数据结构 一.字符串对象(请参考学习之Redis(一):https://www.cnblogs.com/wbq1994/p/12029516.html) 二.列表对象 列表对象的编码 ...
- 学习Linux必看的命令(一)
学习Linux必看的命令(一) 一:什么是Linux Linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,L ...
- 阿里云 centOS系统 配置 node + ngnix
**centOS系统可以直接使用yun命令** 安装node 1.使用git将源码克隆到本地的~/.nvm目录下,并检查最新版本.> yum install git > git clone ...
- flash的几种模式Normal Mode、DUAL Mode、Quad Mode的概念和区别
概念 1. 标准SPI 标准SPI通常就称SPI,它是一种串行外设接口规范,有4根引脚信号:clk , cs, mosi, miso 2. Dual SPI 它只是针对SPI Flash而言,不是针对 ...
- 汇编子程序模块化(near&far)
1: Near 近端使用 C语言实现: #include <stdio.h>#include <stdlib.h> void print(){ printf("p ...
- AES 对称加密
package com.skynet.rimp.common.utils.string; import java.io.UnsupportedEncodingException; import jav ...
- Egg 企业级应用开发框架的搭建
在之前的文章中我们介绍了一下基于 nodejs 开发的 koa2 框架,在之前还有 espress 框架,接下来我们再学习一个 Egg.js. Egg.js 中文官网:https://eggjs.or ...
- SpringCloud微服务(05):Zuul组件,实现路由网关控制
本文源码:GitHub·点这里 || GitEE·点这里 一.Zuul组件简介 1.基础概念 Zuul 网关主要提供动态路由,监控,弹性,安全管控等功能.在分布式的微服务系统中,系统被拆为了多个微服务 ...
- SpringCloud微服务(03):Hystrix组件,实现服务熔断
本文源码:GitHub·点这里 || GitEE·点这里 写在前面:阅读本文前,你可能需要熟悉一下内容. 微服务组件:Eureka管理注册中心 微服务组件:Ribbon和Feign服务调用 Sprin ...