传送门

\(\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. Java Thread系列(三)线程安全

    Java Thread系列(三)线程安全 一.什么是线程安全 线程安全概念:当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的. 线程安全来 ...

  2. c#解决Nullable类型的转换 (包含DataContract的序列化和反序列化以及 该例子应用在反射属性setvalue的时候有用)

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflect ...

  3. 使用c语言实现在linux下的openssl客户端和服务器端编程

    使用c语言实现在linux下的openssl客户端和服务器端编程 摘自:https://www.cnblogs.com/etangyushan/p/3679457.html 前几天组长让我实现一个使用 ...

  4. 百度地图point 转化成经纬度

    百度1.0表示的坐标点,直接在1.3的api上使用坐标无法定位,研究了一阵子百度拾取坐标系统的源码才知道,原来1.0的point是Pixel,调用js的转化代码就搞定了 转化方法如下: var b = ...

  5. CSS实现图片阴影效果

    <title>无标题文档</title> <style type="text/css"> /*方法一:使用一个GIF文件的方法*/ .gifsh ...

  6. iPhone4 8.3 系统下字体下方去除下划线

        NSMutableAttributedString *title = [[NSMutableAttributedString alloc] initWithString:@"先去看看 ...

  7. Android通过xml生成创建View的过程解析

    Android的布局方式有两种,一种是通过xml布局,一种是通过java代码布局,两种布局方式各有各的好处,当然也可以相互混合使用.很多人都习惯用xml布局,那xml布局是如何转换成view的呢?本文 ...

  8. Java反射API研究(4)——Class中的重要对象

    一.Constructor与Method的父类:Executable Executable表示一个可执行类,构造方法与普通方法都是Executable AnnotatedType[] getAnnot ...

  9. vue实现首页导航切换不同路由的方式(二)【使用vuex实现的】

    <nav> <!-- 导航栏 --> <div class="indexNavOut"> <div class="indexNa ...

  10. sql2008 获取表结构说明

    SELECT     表名       = case when a.colorder=1 then d.name else '' end,    表说明     = case when a.color ...