题目

考虑推柿子

最开始的想法是如果两个\(t\)在\(mod\ B\)意义下相等,那么只需要比较一下\((t+\left \lfloor \frac{t}{B}\rfloor \right)mod\ A\)就好了

显然\(t=t\% B+B\times \lfloor \frac{t}{B} \rfloor\)

于是第一维就是$t%B+(B+1)\times \lfloor \frac{t}{B} \rfloor $

也就是说如果\(t\%B\)的是相等的,那么只要\((B+1)\times \lfloor \frac{t}{B} \rfloor\)在\(mod\ A\)意义下是相等的,那么两个\(t\)就是本质相同的

考虑求一下后面那个东西的循环节,显然是\(\frac{lcm(B+1,A)}{B+1}=\frac{A}{gcd(b+1,A)}\)

再考虑到\(t\%B\)的循环节是\(B\),所以整个的循环节就是\(\frac{AB}{gcd(B+1,A)}\),也就是说\(t\)和\(t+\frac{AB}{gcd(B+1,A)}\)是本质相同的

由此我们把这个问题转化成了一个\(mod\ \frac{AB}{gcd(B+1,A)}\)意义的区间覆盖,我们只需要把这些区间放上去覆盖就好了,最后就是求一下被覆盖的总面积,这个是一个非常普及的贪心问题

非常丢人的写错了区间覆盖

代码

  1. #include <bits/stdc++.h>
  2. #define re register
  3. #define max std::max
  4. #define LL long long
  5. inline LL read() {
  6. LL x = 0;char c = getchar();
  7. while (c < '0' || c > '9') c = getchar();
  8. while (c >= '0' && c <= '9') x = (x << 3ll) + (x << 1ll) + c - 48, c = getchar();
  9. return x;
  10. }
  11. int n, m;
  12. LL A, B, L;
  13. const int maxn = 1e6 + 5;
  14. struct Seg {LL l, r;} a[maxn], b[maxn << 1];
  15. LL gcd(LL a, LL b) { return !b ? a : gcd(b, a % b); }
  16. inline void add(LL x, LL y) { b[++m].l = x, b[m].r = y; }
  17. inline int cmp(Seg A, Seg B) { return A.l == B.l ? A.r > B.r : A.l < B.l; }
  18. int main() {
  19. n = read(), A = read(), B = read();
  20. for (re int i = 1; i <= n; i++) a[i].l = read(), a[i].r = read();
  21. for (re int i = 1; i <= n; i++) L = max(L, a[i].r);L++;
  22. LL r = gcd(A, B + 1);
  23. if (A / r <= L / B) L = A / r * B;
  24. for (re int i = 1; i <= n; i++) {
  25. LL x = a[i].r / L - a[i].l / L;
  26. if (x >= 2) {add(0, L - 1);break;}
  27. if (x == 1)
  28. add(0, a[i].r % L), add(a[i].l % L, L - 1);
  29. else
  30. add(a[i].l % L, a[i].r % L);
  31. }
  32. std::sort(b + 1, b + m + 1, cmp);
  33. int p = 1;LL ans = 0;
  34. for (re int i = 1; i <= m; i = p) {
  35. LL T = b[i].r;
  36. while (b[p].l <= T && p <= m) T = max(T, b[p].r), p++;
  37. ans += T - b[i].l + 1;
  38. }
  39. printf("%lld\n", ans);
  40. return 0;
  41. }

「APIO 2019」奇怪装置的更多相关文章

  1. #3144. 「APIO 2019」奇怪装置

    #3144. 「APIO 2019」奇怪装置 题目描述 考古学家发现古代文明留下了一种奇怪的装置.该装置包含两个屏幕,分别显示两个整数 \(x\) 和 \(y\). 经过研究,科学家对该装置得出了一个 ...

  2. 【LOJ #3144】「APIO 2019」奇怪装置

    题意: 定义将一个\(t\)如下转换成一个二元组: \[ f(t) = \begin{cases} x = (t + \left\lfloor \frac{t}{B} \right \rfloor) ...

  3. #3146. 「APIO 2019」路灯

    #3146. 「APIO 2019」路灯 题目描述 一辆自动驾驶的出租车正在 Innopolis 的街道上行驶.该街道上有 \(n + 1\) 个停车站点,它们将街道划分成了 \(n\) 条路段.每一 ...

  4. #3145. 「APIO 2019」桥梁

    #3145. 「APIO 2019」桥梁 题目描述 圣彼得堡市内所有水路长度总和约 282 千米,市内水域面积占城市面积的 7%.--来自维基百科 圣彼得堡位于由 \(m\) 座桥梁连接而成的 \(n ...

  5. 「APIO 2019」桥梁

    题目 三天终于把\(APIO\)做完了 这题还是比较厉害的,如果不知道这是个分块应该就自闭了 考虑一个非常妙的操作,按照操作分块 我们设一个闸值\(S\),把\(S\)个边权修改操作分成一块,把所有的 ...

  6. 「APIO 2019」路灯

    题目 显然一个熟练的选手应该能一眼看出我们需要维护点对的答案 显然在断开或连上某一条边的时候只会对左右两边联通的点产生贡献,这个拿\(set\)维护一下就好了 那现在的问题就是怎么维护了 考虑一个非常 ...

  7. 「WC 2019」数树

    「WC 2019」数树 一道涨姿势的EGF好题,官方题解我并没有完全看懂,尝试用指数型生成函数和组合意义的角度推了一波.考场上只得了 44 分也暴露了我在数数的一些基本套路上的不足,后面的 \(\ex ...

  8. LOJ#3054. 「HNOI 2019」鱼

    LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想 ...

  9. 「UNR#1」奇怪的线段树

    「UNR#1」奇怪的线段树 一道好题,感觉解法非常自然. 首先我们只需要考虑一次染色最下面被包含的那些区间,因为把无解判掉以后只要染了一个节点,它的祖先也一定被染了.然后发现一次染色最下面的那些区间一 ...

随机推荐

  1. Java中JNI的使用详解第四篇:C/C++中创建Java对象和String字符串对象及对字符串的操作方法

    首先来看一下C/C++中怎么创建Java对象:在JNIEnv中有两种方法是用来创建Java对象的: 第一种方法: jobject  NewObject(jclass clazz  , jmethodI ...

  2. NOIp2018集训test-9-23

    这个NOI模拟题怕是比你们的NOIp模拟题要简单哦.. 友好的生物 应该是一道简单题,但是机房只有辉神一个人想到正解似乎. 被我kd-tree水过去了(这不是kd-tree的裸题吗???(不是)) / ...

  3. NX二次开发-UFUN设置透明度UF_OBJ_set_translucency

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_obj.h> UF_initialize( ...

  4. GTK+/GNOME编程(一)

    1.开发环境:安装GTK+/GNOME库 #apt-get install gtk+-3.0                   (安装GTK+库文件) #apt-get install gnome- ...

  5. 牛客多校第六场 D move 枚举/机智题

    题意: 有个家伙装东西,他的策略是贪心,每次装进去这个盒子能装下的最大的东西,直到把这个盒子装满,再去装下一个盒子. 给出盒子的数量k和一些东西的重量,问你最小需要多大的盒子才能以这种贪心策略装下. ...

  6. Devexpress ProgressBarControl的使用

    1 private void simpleButton1_Click(object sender, EventArgs e) 3 { 4 //设置一个最小值 5 progressBarControl1 ...

  7. class13and14and15_登录窗口

    最终的运行效果图(程序见序号6.2): #!/usr/bin/env python# -*- coding:utf-8 -*-# ----------------------------------- ...

  8. class7_Checkbutton 勾选项

    最终的运行效果(程序见序号3):   #!/usr/bin/env python# -*- coding:utf-8 -*-# ------------------------------------ ...

  9. Phpthink入门基础大全(CURD部分)

    [ad code=1 align=center] $data[1]['name'] = ‘阳光雨' $data[1]['email'] = 'sccscc@vip.qq.com' $User>a ...

  10. 用mapreduce实现将mysql数据导出到HDFS上

    因为业务需要,需要将一批mysql数据导入到HBASE,现在先将数据从Mysql导出到HDFS. 版本:hadoop CDH4.5,Hbase-0.946 1.实体类 YqBean 是我的实体类,请根 ...