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. 快速批量删除 docker 镜像或容器

    原文:快速批量删除 docker 镜像或容器 点击在我的博客 xuxusheng.com 中查看,有更好的排版哦~ docker 本身并没有提供批量删除的功能,当有大量的镜像或者容器需要删除的时候,手 ...

  2. ABP 基于DDD的.NET开发框架 学习(四)时间控件采用datetimepicker注意事项

    $('#datetimepicker1').datetimepicker({ format: 'yyyy/mm/dd hh:ii:ss',//这是只能用小写的大写的与ABP中的字母识别起冲突 loca ...

  3. 使用Feign通过服务名调用服务,找不到服务

    fegineureka 报错环境: eureka注册中心在远程服务器上 本地服务注册到远程的eureka注册中心 本地服务通过Fegin组件+服务名调用服务 报错时,注册中心的情况: Applicat ...

  4. VBA for循环

    for循环是一种重复控制结构,它允许开发人员有效地编写需要执行特定次数的循环. 语法 以下是VBA中for循环的语法. For counter = start To end [Step stepcou ...

  5. 【转】Java中File常用的方法汇总

    创建:createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false.mkdir() 在指定位置创建一个单级文件夹.mkdirs() 在指定位置创建 ...

  6. ftl 列表弄成js数组

    例子:ftl 列表:bannerViewUrls var arrayBanner=[<#list bannerViewUrls as list>"${list}"< ...

  7. FICO-Payment Terms 收付款条件和分期付款设置

    转载:https://www.cnblogs.com/weichuo/p/3524278.html Payment Terms 收付款条件和分期付款设置 SAP Payment Terms 中文翻译为 ...

  8. python 将字符串中的unicode字符码转换成字符

    将字符串str =’\u98ce\u534e\u7684\u51b2\u950b'转换成汉字显示 可以直接print输出 print u'\u98ce\u534e\u7684\u51b2\u950b' ...

  9. 虹软人脸识别 - faceId及IR活体检测的更新介绍

    虹软人脸识别 - faceId及IR活体检测的介绍 前几天虹软推出了 Android ArcFace 2.2版本的SDK,相比于2.1版本,2.2版本中的变化如下: VIDEO模式新增faceId(类 ...

  10. nginx的proxy模块详解以及参数

    文章来源 运维公会:nginx的proxy模块详解以及参数 使用nginx配置代理的时候,肯定是要用到http_proxy模块.这个模块也是在安装nginx的时候默认安装.它的作用就是将请求转发到相应 ...