传送门

\(\color{green}{solution}\)

它每次感染的人是它的倍数,那么我们只需要找出那些除了自己以外在\(l\), \(r\)内没有别的数是
它的约数的数,在这里称其为关键数.
(比如区间是[3,7],那么这些数分别是\(3\),\(4\),\(5\),\(7\).因为\(6\)是\(3\)的倍数,所以不是).
我们记这些数的数量为\(sum\).那么设\(f_i\)为在第\(i\)时刻将说有人感染完的方案数.
那么换句话来说,就是最后一个关键数在第\(i\)时刻被感染.
那么\(f_i\) = \(sum\) \(\times (_{n-i}^{n-sum}) \times(i - 1)! \times(n-i)!\).所以最后\(ans = \sum_{i=sum}^{n} i \times f_i\)

BZOJ的垃圾评测机+卡常真的让人难受

#include <bits/stdc++.h>
using namespace std;

const int mod = 1e9 + 7, maxn = 1e7 + 10;

int fac[maxn], ifac[maxn], l, r;

int C(int n, int m) {
    if( n < m) return 0;
    return 1LL * fac[n] * ifac[m] % mod * ifac[n-m] % mod;
}

int _pow(int x, int n) {
    int ret = 1;
    for ( ; n; n >>= 1, x = 1LL * x * x % mod)
        if( n & 1) ret = 1LL * ret * x % mod;
    return ret;
}

bool book[maxn];
int pri[maxn], ipri[maxn], cnt;

int sum, ans, n;

int main() {
    scanf("%d%d", &l, &r);
    fac[0] = 1;
    for ( register int i = 1; i <= r; ++ i) {
        fac[i] = 1LL * fac[i-1] * i % mod;
    }
    ifac[r] = _pow(fac[r], mod-2);
    for ( register int i = r-1; ~i; -- i) {
        ifac[i] = 1LL * ifac[i+1] * (i + 1) % mod;
    }
    if( l == 1) {
        ans = 1LL * fac[r] * (r + 1) % mod * ifac[2] % mod;
        printf("%d\n", ans); return 0;
    }
//  for ( register int i = l; i <= r; ++ i) if( !book[i]) {
//      ++ sum;
//      for ( register int k = i; k <= r; k += i) book[k] = 1;
//  }
    for ( register int i = 2; i <= r; ++ i) {
        if( !book[i]) pri[++ cnt] = i, ipri[i] = 1;
        for ( register int k = 1; k <= cnt; ++ k) {
            if( 1LL * pri[k] * i > r) break;
            ipri[i * pri[k]] = i; book[i*pri[k]] = 1;
            if( i % pri[k] == 0) break;
        }
    }
    for ( register int i = l; i <= r; ++ i) {
        if( ipri[i] < l) ++ sum;
    }
    n = r - l + 1;
    for ( register int i = sum; i <= n; ++ i) {
        ans = (ans + 1LL * i * sum % mod * C(n - sum, n - i) % mod * fac[n - i] % mod * fac[i - 1] % mod) % mod;
    }
    printf("%d\n", ans);
    return 0;
}

吐槽:
九条可怜 + 组合数学 = 瞬间爆炸.还有为什么可以二次感染,度错题写了半天QAQ;


[BZOJ 5323][Jxoi2018]游戏的更多相关文章

  1. 【BZOJ5323】[JXOI2018]游戏(组合计数,线性筛)

    [BZOJ5323][JXOI2018]游戏(组合计数,线性筛) 题面 BZOJ 洛谷 题解 显然要考虑的位置只有那些在\([l,r]\)中不存在任意一个约数的数. 假设这样的数有\(x\)个,那么剩 ...

  2. [JXOI2018]游戏 (线性筛,数论)

    [JXOI2018]游戏 \(solution:\) 这一道题的原版题面实在太负能量了,所以用了修改版题面. 这道题只要仔细读题,我们就可以将题目的一些基本性质分析出来:首先我们定义:对于某一类都可以 ...

  3. 【题解】JXOI2018游戏(组合数)

    [题解]JXOI2018游戏(组合数) 题目大意 对于\([l,r]\)中的数,你有一种操作,就是删除一个数及其所有倍数.问你删除所有数的所有方案的步数之和. 由于这里是简化题意,有一个东西没有提到: ...

  4. [BZOJ]1059 矩阵游戏(ZJOI2007)

    虽然说是一道水题,但小C觉得还是挺有意思的,所以在这里mark一下. Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白 ...

  5. bzoj 3875 骑士游戏 - spfa - 动态规划

    Description  [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. [问题描述] 在这个游戏中,J ...

  6. BZOJ5323 & 洛谷4562:[JXOI2018]游戏——题解

    https://www.luogu.org/problemnew/show/P4562 https://www.lydsy.com/JudgeOnline/problem.php?id=5323 (B ...

  7. BZOJ 1854: [Scoi2010]游戏 无向图判环

    题目链接: 题目 1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MB 问题描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装 ...

  8. bzoj 1455: 罗马游戏 左偏树+并查集

    1455: 罗马游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 668  Solved: 247[Submit][Status] Descriptio ...

  9. [BZOJ 1025] [SCOI2009] 游戏 【DP】

    题目链接:BZOJ - 1025 题目分析 显然的是,题目所要求的是所有置换的每个循环节长度最小公倍数的可能的种类数. 一个置换,可以看成是一个有向图,每个点的出度和入度都是1,这样整个图就是由若干个 ...

随机推荐

  1. 遍历ListView,查出每一项的内容

    private ListView.OnItemClickListener showItemDetail = new ListView.OnItemClickListener() { public vo ...

  2. DataGridView相关代码

    加行号: private void dgv_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { //添加行号 var ...

  3. Redis数据结构(六)

    Redis数据结构(Sort-set)(游戏排名和微博热点话题排名上应用): 特点:可存储有序但不重复的数据,根据分数指定存储顺序 1 Sort-set和Set的区别: (1)sort的每个成员都是以 ...

  4. ImageUploader卸载教程-Xproer.ImageUploader

    1.1. 手动卸载控件-Windows XP 主要步骤如下: 1.关闭所有IE 2.打开cmd 3.进入C:\Windows\System32 4.输入命令regsvr32 -u ImageUploa ...

  5. zstu4273 玩具 2017-03-22 14:18 49人阅读 评论(0) 收藏

    4273: 玩具 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 700  Solved: 129 Description 商店有n个玩具,第i个玩具有 ...

  6. java try catch finally return执行

    public static int testBasic(){ int i = 1; try{ i++; System.out.println("try block, i = "+i ...

  7. (轉)Equal height boxes with CSS

    原文:http://www.456bereastreet.com/archive/200405/equal_height_boxes_with_css/ 下面是我翻译的内容,是根据我对文章的理解意译的 ...

  8. Android-有序广播明确指定接收者

    在上一篇博客,Android-有序广播是可以中断的,介绍了 有序广播是可以中断的,但还有一种例外情况:明确指定接收者的有序广播是无法中断的,一定会发送到指定的接收者 AndroidManifest.x ...

  9. 使用Team Explorer Everywhere (TEE) 2015 SDK获取团队项目的签入策略

    TFS的代码签入策略与IDE工具紧密相关,例如Visual Studio中设置的签入策略,只会影响Visual Studio的团队资源管理器:如果需要在Eclipse的TEE中启用签入策略,你还需要在 ...

  10. [Elixir003] Mix Archives

    在[Elixir001]中使用 mix escript.build 生成一个lifelog 的escript启动脚本. 今天我们尝试一下另一种方式:生成Archives. 我们先添加一个Task 1. ...