打卡信奥刷题(1448)用C++实现信奥 P4981 父子

P4981 父子

题目背景

上演在各大学男生寝室的日常 :::

A:A :A: “我没带纸,快来厕所救我!”

B:B :B: “叫爸爸。”

A:A :A: “爸爸!”

....................................................................................................................................

A:A :A: “我没钱了,能借我点吗。”

B:B :B: “叫爸爸。”

A:A :A: “爸爸!”

一个月后、

B:B :B: “能把钱还给我吗。”

A:A :A: “叫爸爸。”

B:B :B: “爸爸!”

题目描述

对于全国各大大学的男生寝室,总是有各种混乱的父子关系。

那么假设现在我们一个男生寝室有不同的 nnn 个人,每个人都至多有一个“爸爸”,可以有多个“儿子”,且有且只有一个人没有“爸爸”(毕竟是室长,还是要给点面子,当然了,室长人人当嘛)。

那么现在问题来了,对于一个有 nnn 个人的寝室,最多可能存在多少种父子关系,当然每个人之间都必须要有直接或间接的父子关系。

输入格式

第一行一个非负整数 ttt,表示有 ttt 组数据。

接下来 ttt 行,每行一个整数 nnn,表示有 nnn 个人。

输出格式

ttt 行,每行一个整数,求关系个数。

由于答案可能较大,则我们需要输出答案对 109+910^9+9109+9 取模的值。

输入输出样例 #1

输入 #1

1
3

输出 #1

9

输入输出样例 #2

输入 #2

1
323

输出 #2

283888610

说明/提示

  • 对于 10%10\%10% 的数据,保证 t=0t=0t=0

  • 另有 30%30\%30% 的数据,保证 n≤5n≤5n5

  • 对于 100%100\%100% 的数据,t≤104t≤10^4t1041≤n≤1091\le n\le10^91n109

C++实现

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

typedef long long LL;
const LL Mod=1e9+9;
LL power(LL n,LL m,LL p) {
    LL ret=1;
    while (m) {
        if (m&1) ret=(ret*n)%Mod;
        n=(n*n)%Mod;
        m>>=1;
    }
    return ret;
}
int main() {
    int cas; scanf("%d",&cas);
    while(cas--) {
        LL n;
        scanf("%lld",&n);
        printf("%lld\n",power(n,n-1,Mod));
    }
    return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值