NYOJ127 星际之门(一)(最小生成数的个数+快速幂)

题目描述:

http://acm.nyist.net/JudgeOnline/problem.php?pid=127

可以证明,修建N-1条虫洞就可以把这N个星系连结起来。

现在,问题来了,皇帝想知道有多少种修建方案可以把这N个星系用N-1条虫洞连结起来?

输入
第一行输入一个整数T,表示测试数据的组数(T<=100)

每组测试数据只有一行,该行只有一个整数N,表示有N个星系。(2<=N<=1000000)

输出
对于每组测试数据输出一个整数,表示满足题意的修建的方案的个数。输出结果可能很大,请输出修建方案数对10003取余之后的结果。
样例输入
2
3
4
样例输出
3
16

题目分析:

快速幂+完全图的最小生成树的个数,n个顶点的最小生成树的个数为n^(n-2)。

AC代码1 O(n):

/**
 *在一个n阶完全图的所有生成树的数量为n的n-2次方
 */
#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<cstdlib>
#include<cctype>
#include<cstring>
#include<cmath>
#define MOD 10003
using namespace std;
int Sum(int n){
    int res=n;
    for(int i=1;i<=n-3;i++){
        res*=n;
        res%=MOD;
    }
    return res;
}
int main()
{
    int n,t;
    cin>>t;
    while(t--){
        cin>>n;
        if(n==2){//只有一中
            cout<<"1"<<endl;
            continue;
        }
        int res=n;
        for(int i=1;i<=n-3;i++){
            res*=n;
            res%=MOD;
        }
        cout<<res<<endl;
    }
	return 0;
}
        

AC代码2 O(logn)

/**
 *在一个n阶完全图的所有生成树的数量为n的n-2次方
 */
#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<cstdlib>
#include<cctype>
#include<cstring>
#include<cmath>
#define MOD 10003
using namespace std;
int Mod(int a,int b)//快速幂
{
    int ret=1;
    int tmp=a;
    while(b)
    {
       //奇数存在
       if(b&1) ret=ret*tmp%MOD;
       tmp=tmp*tmp%MOD;
       b>>=1;
    }
    return ret;
}
int main()
{
    int n,t;
    cin>>t;
    while(t--){
        cin>>n;
        if(n==2){//只有一中
            cout<<"1"<<endl;
            continue;
        }
        /**
        int res=n;
        for(int i=1;i<=n-3;i++){
            res*=n;
            res%=MOD;
        }
        cout<<res<<endl;
        **/
        cout<<Mod(n,n-2)<<endl;
    }
	return 0;
}
        
时间: 2024-08-09 22:01:58

NYOJ127 星际之门(一)(最小生成数的个数+快速幂)的相关文章

NYOJ127 星际之门(一)(最小生成数的个数+高速幂)

题目描写叙述: http://acm.nyist.net/JudgeOnline/problem.php?pid=127 能够证明.修建N-1条虫洞就能够把这N个星系连结起来. 如今.问题来了.皇帝想知道有多少种修建方案能够把这N个星系用N-1条虫洞连结起来? 输入 第一行输入一个整数T,表示測试数据的组数(T<=100) 每组測试数据仅仅有一行.该行仅仅有一个整数N.表示有N个星系. (2<=N<=1000000) 输出 对于每组測试数据输出一个整数.表示满足题意的修建的方案的个数.

nyoj-----127星际之门(一)

星际之门(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 公元3000年,子虚帝国统领着N个星系,原先它们是靠近光束飞船来进行旅行的,近来,X博士发明了星际之门,它利用虫洞技术,一条虫洞可以连通任意的两个星系,使人们不必再待待便可立刻到达目的地. 帝国皇帝认为这种发明很给力,决定用星际之门把自己统治的各个星系连结在一起. 可以证明,修建N-1条虫洞就可以把这N个星系连结起来. 现在,问题来了,皇帝想知道有多少种修建方案可以把这N个星系用N-1条虫洞连结起来?

Quick-Select 1亿个数快速求第K小的数 分治法

Quick-Select  1亿个数快速求第K小的数  分治法 利用快速排序的思想,一开始选取中枢元,然后左右调整,接着比对中枢元p和K的大小,如果 p+1 = k (数组从0开始), 那么a[p] 就是答案,因为在p之前的,肯定都是小于a[p]的, 在p之后的,肯定大于p, 所以 a[p] 就是第 p+1 小.假如 p+1 不等于K, 那么根据大小,进行左右调整.调整过程中,理想状态下,每次都砍掉一半,数组的起始坐标要进行调整. 代码: // 快速排序法的修改 #include <iostre

POJ1845 Sumdiv - 乘法逆元+快速幂【A^B的约数个数和】

POJ1845 Sumdiv Sol: 约数个数和\(sumdiv=(1+p_1+p_1^2+\dots + p_1^{c_1})*\dots *(1+p_k+p_k^2+\dots + p_k^{c_k})\) 其中每一项都是一个首项为1,公比为\(p_i\)的等比数列的和,即 \(1*\frac{1-p_i^{c_{k}+1}}{1-p_i}=\frac{p_i^{c_{k}+1}-1}{p_i-1}\) 可以通过快速幂+逆元求解. 然而,当\(9901|(p_i-1)\)时,\(p_i-1

信息学奥赛一本通 提高篇 序列第k个数 及 快速幂

我是传送门 这个题首先是先判断是等差还是等比数列 等差的话非常简单: 前后两个数是等差的,举个栗子: 3 6 9 12 这几个数,(我感觉 1 2 3 4并说明不了什么) 每次都加3嘛,很容易看出,第一个数是3 * 1,第二个是3 * 2....以此类推 第k个数 = (第2个数 - 第1个数) * k ; (z - y) * k % 200907 % 200907 的原因是题目要求 但是这样并不能过 hack一下 4 7 10 13 用原先的公式:(7 - 4) * 4 % 200907 =

NYOJ127 星际之门(一)【定理】

星际之门(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 公元3000年,子虚帝国统领着N个星系,原先它们是靠近光束飞船来进行旅行的,近来,X博士发明了星际之门,它利用虫洞技术,一条虫洞可以连通任意的两个星系,使人们不必再待待便可立刻到达目的地. 帝国皇帝认为这种发明很给力,决定用星际之门把自己统治的各个星系连结在一起. 可以证明,修建N-1条虫洞就可以把这N个星系连结起来. 现在,问题来了,皇帝想知道有多少种修建方案可以把这N个星系用N-1条虫洞连结起来?

最小生成数之Kruskal算法

描述 随着小Hi拥有城市数目的增加,在之间所使用的Prim算法已经无法继续使用了--但是幸运的是,经过计算机的分析,小Hi已经筛选出了一些比较适合建造道路的路线,这个数量并没有特别的大. 所以问题变成了--小Hi现在手上拥有N座城市,且已知其中一些城市间建造道路的费用,小Hi希望知道,最少花费多少就可以使得任意两座城市都可以通过所建造的道路互相到达(假设有A.B.C三座城市,只需要在AB之间和BC之间建造道路,那么AC之间也是可以通过这两条道路连通的). 输入 每个测试点(输入文件)有且仅有一组

【JSOI 2008】【BZOJ 1016】最小生成数计数

这题题目中有一个很显眼的提示,每种权值的边不会超过10条,这提示我们可以采用些暴力方法. 首先在每个最小生成树中有两个结论: 1.每种权值的边数相等. 2.每种权值所选边构建后图的联通形态相同. 1比较好理解,若1不成立,则最小生成树总权值不固定. 2可以通过Kruskal算法流程来理解. code: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using

[最小生成数] 还是畅通工程

题目描述 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小.请计算最小的公路总长度. 输入 测试输入包含若干测试用例.每个测试用例的第1行给出村庄数目N ( < 100 ):随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离.为简单起见,村庄从1到N编号.