UVA 10843 - Anne's game

Problem D
Anne's game
Time Limit: 2 seconds

Lily: "Chantarelle was part of my exotic phase."
Buffy: "It's nice. It's a mushroom."
Lily: "It is? That's really embarrassing."
Buffy: "Well, it's an exotic mushroom, if that's any comfort."

Joss Whedon, "Anne".

A little girl whose name is Anne Spetring likes to play the following game. She draws a circle on paper. Then she draws another one and connects it to the first cicrle by a line. Then she draws another and connects it to one of the first two circles by a line. She continues this way until she has n circles drawn and each one connected to one of the previously drawn circles. Her circles never intersect and lines never cross. Finally, she numbers the circles from 1 to n in some random order.

How many different pictures can she draw that contain exactly n circles? Two pictures are different if one of them has a line connecting circle number i to circle number j, and the other picture does not.

Input
The first line of input gives the number of cases, NN test cases follow. Each one is a line containing n(0<n<=100).

Output
For each test case, output one line containing "Case #x:" followed by X, where X is the remainder after dividing the answer by 2000000011.

Sample InputSample Output
3
1
2
3
Case #1: 1
Case #2: 1
Case #3: 3


Problemsetter: Igor Naverniouk



思路:相当于求n个点有多少个生成树。 有公式 n ^ (n-2) .... 可以用那个什么编码推出来。不过应该dp也行。


代码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <string.h>
#include <cstring>
#include <time.h>
#include <map>
#include <set>
#include <stdio.h>
#include <cmath>
#include <cassert>
#include <math.h>
#define rep(i,a,b) for(int i=(a);i<(b);++i)
#define rrep(i,b,a) for(int i = (b); i >= (a); --i)
#define clr(a,x) memset(a,(x),sizeof(a))
#define LL long long
#define eps 1e-9
#define mp make_pair
using namespace std;
const int mod = 2000000011;

LL qpow(LL b,LL p)
{
    LL ret = 1;
    while (p > 0) {
        if (p & 1) ret = b * ret % mod;
        b = b * b % mod;
        p >>= 1;
    }
    return ret;
}

int main()
{
    #ifdef ACM
        freopen("in.txt", "r", stdin);
       // freopen("out.txt","w",stdout);
    #endif // ACM
    int T; cin >> T;
    rep(cas,1,T+1) {
        int n; scanf("%d",&n);
        printf("Case #%d: %lld\n",cas,qpow(n,n-2));
    }
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值