Problem

Similar to the strange ability of Martin (the hero of Martin Martin), Ghh will random occurrence in one of \(N\) cities every morning and the money will change to \(X\) RMB (No matter how much money had yesterday).

Ghh finds that every \(N\) cities have only one way to enter and go out (for example, city A's out road is connected with city B's enter road, or city A's out road may also be connected with city A's enter road). After waking up one day, Ghh suddenly wants to do an experiment.

In the following days, Ghh will judge whether he has experimented in the city every time he wakes up. If not, he will go out to see if he can start from the city and finally return to itself. If he can't or has already done it, he will stay until the evening and go to the next random city by sleeping. This experiment lasts until every \(N\) cities have been done.

Because the distances between cities are very far, Ghh decides to take bus. The cost of bus between any two cities is \(1\) RMB (it also costs \(1\) RMB for the city that the enter road is connected with the out road of itself) and the speed is very fast. What is the probability that Ghh can return to the city itself from every city when Ghh has finished the experiment?

Note

When \(n=2\), there are two cases in city A and B:

  1. A connected with A, B connected with B
  2. A connected with B

When \(X\) is 1, only in the first case every city can return to itself, so the probability is 1/2. When \(X\) is 2, any case is ok.

Input

The first line, input a integer \(T\) represents the number of test cases (\(T \le 10^4\)). Next \(2\) ~ \(T+1\) line, input two integers \(N\), \(X\) represents the total number of cities and initial money (\(2≤N≤10^6\),\(N≤2X≤2×10^9\)). \(\sum{N} \le 10^7\).

Output

Each test case output one line, the probabilities may be \(a/b\), please output \(a*inv(b)\mod (10^9+7)\). \(inv(b)\) is the inverse of \(b\).

样例输入复制

3
2 1
2 2
145 134

样例输出复制

500000004
1
772215686

Comprehension

题意大概是说:有n个城市,每个城市只有以一种进出方式(入度、出度相同),从一个城市去另一个城市要1块钱。现在不知道这个图是什么样的,现在需要能从每个城市出发(有X块钱)能回到该城市,得到这样的图的概率是多少?

也就是说:目标的图肯定是很多欧拉回路组成的图,问每条欧拉回路的长度都不大于X的概率是多少?

Solve

根据对题意的理解,我们发现不好枚举这样的图,不如去枚举所有不满足该条件的图,也就是说去找存在欧拉回路长度大于X的图。

题目限制了\(N\le 2X\) ,这就是说有X点的欧拉回路,就没有X+1的

很显然,选出大于X个点连成环,剩下点自由组合。

我们不妨设大于X个点是m,\(X<m<N\)

\(P(m)=\)存在欧拉回路长度大于X的图的数量/总图数

存在欧拉回路长度大于X的图的数量=N个里面选m个 \(\times\) m-1(环内)的全排列(因为起点是固定的 \(\times\) n-m(剩下的点)的全排列

\(P(m)=C(m,N)*(m-1)!*(N-m)!/N!=1/m\)

所以\(ans=1-\sum\limits_{m>X}^N{P(m)}\)

因为\(P(m)\) 最大到N,是1e6,所以开个前缀和维护一下,省时间

Code

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int mod = 1e9 + 7;
const int maxn = 1e6+4;

ll qpow(ll a,ll b){
    ll ans=1;
    while(b){
        if(b&1)
            ans=(ans*a)%mod;
        a=(a*a)%mod;
        b>>=1;
    }
    return ans%mod;
}

ll inv(ll a){
    return qpow(a,mod-2);
}

ll sum[maxn];

int main()
{
    int t;
    ll n,x;
    for(int i = 1; i<maxn;i++){
        sum[i]=(sum[i-1]+inv(i))%mod;
    }
    scanf("%d",&t);
    while(t--) {
        scanf("%lld%lld", &n, &x);
        ll ans=1;
        if(n>x)
            ans = (ans+ mod -(sum[n]-sum[x]))%mod;
        cout<<ans<<endl;
    }

    return 0;
}

2019 ICPC 沈阳网络赛 J. Ghh Matin的更多相关文章

  1. 2018 ICPC 沈阳网络赛

    2018 ICPC 沈阳网络赛 Call of Accepted 题目描述:求一个算式的最大值与最小值. solution 按普通算式计算方法做,只不过要同时记住最大值和最小值而已. Convex H ...

  2. 2019 ICPC 南昌网络赛

    2019 ICPC 南昌网络赛 比赛时间:2019.9.8 比赛链接:The 2019 Asia Nanchang First Round Online Programming Contest 总结 ...

  3. 计蒜客 2019南昌邀请网络赛J Distance on the tree(主席树)题解

    题意:给出一棵树,给出每条边的权值,现在给出m个询问,要你每次输出u~v的最短路径中,边权 <= k 的边有几条 思路:当时网络赛的时候没学过主席树,现在补上.先树上建主席树,然后把边权交给子节 ...

  4. 2019年ICPC南昌网络赛 J. Distance on the tree 树链剖分+主席树

    边权转点权,每次遍历到下一个点,把走个这条边的权值加入主席树中即可. #include<iostream> #include<algorithm> #include<st ...

  5. 2017 icpc 沈阳网络赛

    cable cable cable Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  6. 2019南昌邀请赛网络赛:J distance on the tree

    1000ms 262144K   DSM(Data Structure Master) once learned about tree when he was preparing for NOIP(N ...

  7. 2019 ICPC南京网络赛 F题 Greedy Sequence(贪心+递推)

    计蒜客题目链接:https://nanti.jisuanke.com/t/41303 题目:给你一个序列a,你可以从其中选取元素,构建n个串,每个串的长度为n,构造的si串要满足以下条件, 1. si ...

  8. 2019 ICPC 银川网络赛 F-Moving On (卡Cache)

    Firdaws and Fatinah are living in a country with nn cities, numbered from 11 to nn. Each city has a ...

  9. 2019 ICPC 南京网络赛 F Greedy Sequence

    You're given a permutation aa of length nn (1 \le n \le 10^51≤n≤105). For each i \in [1,n]i∈[1,n], c ...

随机推荐

  1. log4net SmtpAppender 踩坑总结

    错误集合: System.Net.Mail.SmtpException: 命令顺序不正确. 服务器响应为:Error: need EHLO and AUTH first ! System.Net.Ma ...

  2. TypeScript入门一:配置TS工作环境

    配置手动编译TS文件工作环境 配置webpack自动化打包编译工作环境(后面补充) 一.TypeScript入门学习引言 进入主题之前,首先说明这个系列的博客是我刚刚接触TypeScript的学习笔记 ...

  3. iview-admin本地测试上线登陆问题和文件路径找不到问题

    在项目中vue.config.js下修改上线路径(图中我修改为:根目录路径) 测试本地上线登陆出现问题: 在main.js下if (process.env.NODE_ENV !== 'producti ...

  4. iOS开发-NSString去掉所有换行及空格

    1.去掉字符串两端的空格及回车 - (NSString *)removeSpaceAndNewline:(NSString *)str{ NSString *temp = [str stringByT ...

  5. stm32和sd卡

    SD卡从容量上讲分两种:标准容量和大容量,最小的是标准容量,小于等于2G 其中的访问关系如下: SD卡分为两种模式:认证模式和传输模式,每一个模式包含着不同的状态,如下 以下主要讲其初始化过程: SD ...

  6. pandas 25 式

    英文版 Jupyter Notebook 链接:https://nbviewer.jupyter.org/github/justmarkham/pandas-videos/blob/master/to ...

  7. python之os与json&pickle模块

     一.os模块 简单概述一下os模块就是与操作系统交互的一个接口 import os #os.getcwd() print(os.getcwd()) # 获取到当前工作目录 # 运行结果:E:\pyt ...

  8. Java泛型全解析【接口、类、封装类型】

    目录   1.导读  2.为何需要泛型?   3.泛型的定义格式   3.泛型的好处  4.什么时候使用泛型?   5.泛型的擦除   6.泛型的补偿  7.泛型的应用      7.1[泛型类]   ...

  9. PHM与智慧运维落地实践案例集 — 机车运用数据智能诊断系统正式上线

    2019年9月20日,经过为期一个多月的紧张测试,北京润科通用技术有限公司为中车某机车单位倾力打造的“机车运用数据智能诊断系统”正式上线运行,标志着润科通用在轨道交通智慧运维领域的又一案例成功落地. ...

  10. 蓝桥杯 ALGO-156 表达式计算 JAVA代码 栈的应用

     算法训练 表达式计算   时间限制:1.0s   内存限制:256.0MB      问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个 ...