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, N. N 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 Input | Sample 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));
}
}