失望……
B题其实很简单,完全有能力出,我和luyi陷在我一个错误的树DP模型中……
其实就是几个简单的组合数,谁可以都会的问题。
PROBLEM B
1 #include <iostream>
2 #include <algorithm>
3 #include <cstring>
4 #include <cstdio>
5 #include <string>
6 #include <numeric>
7 using namespace std;
8 const int N = 1011;
9 const long long MOD = 1000003;
10 const int M = 1011;
11 struct node
12 {
13 int v, s;
14 node *left, *right;
15 }pool[N], *root, *pp;
16
17 int a[N], b[N];
18 long long dp[N][M], c[N][N];
19 int n, m;
20 void preprocess()
21 {
22 for(int i = 1;i < N;i++)
23 {
24 c[i][0] = 1;
25 c[i][i] = 1;
26 for(int j = 1;j < i;j++)
27 c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % MOD;
28 }
29 }
30
31 node *newNode(int v)
32 {
33 pp->left = pp->right = NULL;
34 pp->v = v;
35 pp->s = 1;
36 return pp++;
37 }
38
39 void insert(node* &root, int v)
40 {
41 if(root == NULL)
42 {
43 root = newNode(v);
44 return;
45 }
46 root->s++;
47 if(v > root->v)
48 insert(root->right, v);
49 else
50 insert(root->left, v);
51 }
52
53 long long dfs(node* root)
54 {
55 long long ans = 1;
56 if(!root)
57 return ans;
58 if(root->left && root->right)
59 ans *= c[root->left->s + root->right->s][root->left->s];
60 ans = ans * dfs(root->left) % MOD;
61 ans = ans * dfs(root->right) % MOD;
62 return ans;
63 }
64
65 int main()
66 {
67 int cases;
68 preprocess();
69 scanf("%d", &cases);
70 while(cases--)
71 {
72 scanf("%d %d", &n, &m);
73 root = NULL;
74 pp = pool;
75 for(int i = 0;i < n;i++)
76 {
77 scanf("%d", &a[i]);
78 insert(root, a[i]);
79 }
80 printf("%lld\n", (c[m][n] * dfs(root)) % MOD);
81 }
82 return 0;
83 }
2 #include <algorithm>
3 #include <cstring>
4 #include <cstdio>
5 #include <string>
6 #include <numeric>
7 using namespace std;
8 const int N = 1011;
9 const long long MOD = 1000003;
10 const int M = 1011;
11 struct node
12 {
13 int v, s;
14 node *left, *right;
15 }pool[N], *root, *pp;
16
17 int a[N], b[N];
18 long long dp[N][M], c[N][N];
19 int n, m;
20 void preprocess()
21 {
22 for(int i = 1;i < N;i++)
23 {
24 c[i][0] = 1;
25 c[i][i] = 1;
26 for(int j = 1;j < i;j++)
27 c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % MOD;
28 }
29 }
30
31 node *newNode(int v)
32 {
33 pp->left = pp->right = NULL;
34 pp->v = v;
35 pp->s = 1;
36 return pp++;
37 }
38
39 void insert(node* &root, int v)
40 {
41 if(root == NULL)
42 {
43 root = newNode(v);
44 return;
45 }
46 root->s++;
47 if(v > root->v)
48 insert(root->right, v);
49 else
50 insert(root->left, v);
51 }
52
53 long long dfs(node* root)
54 {
55 long long ans = 1;
56 if(!root)
57 return ans;
58 if(root->left && root->right)
59 ans *= c[root->left->s + root->right->s][root->left->s];
60 ans = ans * dfs(root->left) % MOD;
61 ans = ans * dfs(root->right) % MOD;
62 return ans;
63 }
64
65 int main()
66 {
67 int cases;
68 preprocess();
69 scanf("%d", &cases);
70 while(cases--)
71 {
72 scanf("%d %d", &n, &m);
73 root = NULL;
74 pp = pool;
75 for(int i = 0;i < n;i++)
76 {
77 scanf("%d", &a[i]);
78 insert(root, a[i]);
79 }
80 printf("%lld\n", (c[m][n] * dfs(root)) % MOD);
81 }
82 return 0;
83 }
小猴一样是半调子……喊了半年了博弈依然没有学,他的数学底子是很好的,但是已经挥霍太多了……
我们现在攻关强题的能力完全没有,唯一能保证的就是简单题的1A……
接下来会越来越艰难。
新成立的IF队的实力很强,在少一人的情况下一样可以完虐我们。epic更不用说了,是今天的一队,实力更在我们之上。
ACMaster经过了长时间的磨合,实力也比我们强,而且相比于我们他们的个人实力都比较综合,尤其是ALEX,discover是数学强人,小猴这样半调子下去根本没法比。
新成立的TMP在少一人的情况下,依然和我们是平手……
我真的希望明年能有一个金牌……但是现实是残酷的,以队伍现在的实力真的是没法取得什么样的成绩。
不知近年是否有我们出去比赛的机会了,我希望能多见识一下场面,但是复旦已经决定由ACMaster和epic出战了机会估计是没有了吧
接下来好好备战吧,省赛四省赛要取得好的成绩呀!
下周一定要把按位DP搞定,不能再拖了!