0%

思路讲解

我发现,这个还是要解偶,就是说,我们要得到放的种类数,但是这个“种类”,就是第 1 小的数字放在哪里,第 2 小的数字放在哪里,。。。,第 n 小的数字放在哪里。其中具体放什么数字,直接从这个他后面的数字中取就可以了。

AC代码

心路历程(WA,TLE,MLE……)

会算多的想法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for(int i=4;i<=N;i+=2){

// 这个代码的问题在于不是所有的都能换
// 只有处于末尾位置的节点才可以换
FOR(k,1,N){
if(i-2-k<0) break;
dp[i]+=dp[i-2]*(i-2-k)*2;
dp[i]+=dp[i-2];
dp[i]%=mod;
}

// 分母是 (i-1)!
ans[i]=dp[i]*inv[i-1];
ans[i]%=mod;
}

但是我认为总体大思路是没有问题的,其实难点就在于如何知道可以更换的末尾节点有多少个。

思路讲解

这个就是我们这个数在 rank=2 到 rank=i 的总和。

1
2
3
4
5
6
7
8
9
10
11
FOR(i, 2, N) {
ll lans = 0;
lans = binpow(2, N - i) * (binpow(3, i - 1) - 1);
lans %= mod;
lans *= inv2;
lans %= mod;
lans *= A[i];
lans %= mod;
ans += lans;
ans %= mod;
}

rank=1 的时候的贡献。

1
2
3
4
5
6
FOR(i, 1, N) {
ll lans = binpow(2, N - i) * A[i];
lans %= mod;
ans += lans;
ans %= mod;
}

AC代码

https://qoj.ac/submission/1345581

心路历程(WA,TLE,MLE……)

思路讲解

不难发现,可以用二分答案做。

那么思路就是发现ab,ac都可以看为是A的,但是因为ab,ac的不对称性,所以都要检验一遍。

具体check函数见下面。

1
2
3
4
5
6
7
8
9
10
11
ll a,b,c,ab,ac,bc,abc;
bool check(ll mid){
if(a+ac+ab+abc<mid) return false;
if(b+bc+ab+abc<mid) return false;
if(c+bc+ac+abc<mid) return false;
if(a+c+ab+ac+bc+abc<2*mid) return false;
if(a+b+ab+ac+bc+abc<2*mid) return false;
if(b+c+ab+ac+bc+abc<2*mid) return false;
if(N/3<mid) return false;
return true;
}

AC代码

https://vjudge.net/solution/63690535

心路历程(WA,TLE,MLE……)

思路讲解

通过打表,我们发现这个通过最大值和这个长度,我们可以唯一确定一个序列。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
最大值为:1 的长度为:1 的东西:1
最大值为:2 的长度为:1 的东西:1
最大值为:2 的长度为:2 的东西:1
最大值为:3 的长度为:1 的东西:1
最大值为:3 的长度为:2 的东西:1
最大值为:3 的长度为:3 的东西:1
最大值为:4 的长度为:1 的东西:1
最大值为:4 的长度为:2 的东西:1
最大值为:4 的长度为:3 的东西:1
最大值为:4 的长度为:4 的东西:1
最大值为:5 的长度为:1 的东西:1
最大值为:5 的长度为:2 的东西:1
最大值为:5 的长度为:3 的东西:1
最大值为:5 的长度为:4 的东西:1
最大值为:5 的长度为:5 的东西:1
最大值为:6 的长度为:1 的东西:1
最大值为:6 的长度为:2 的东西:1
最大值为:6 的长度为:3 的东西:1
最大值为:6 的长度为:4 的东西:1
最大值为:6 的长度为:5 的东西:1
最大值为:6 的长度为:6 的东西:1
最大值为:7 的长度为:1 的东西:1
最大值为:7 的长度为:2 的东西:1
最大值为:7 的长度为:3 的东西:1
最大值为:7 的长度为:4 的东西:1
最大值为:7 的长度为:5 的东西:1
最大值为:7 的长度为:6 的东西:1
最大值为:7 的长度为:7 的东西:1
最大值为:8 的长度为:1 的东西:1
最大值为:8 的长度为:2 的东西:1
最大值为:8 的长度为:3 的东西:1
最大值为:8 的长度为:4 的东西:1
最大值为:8 的长度为:5 的东西:1
最大值为:8 的长度为:6 的东西:1
最大值为:8 的长度为:7 的东西:1
最大值为:8 的长度为:8 的东西:1
最大值为:9 的长度为:1 的东西:1
最大值为:9 的长度为:2 的东西:1
最大值为:9 的长度为:3 的东西:1
最大值为:9 的长度为:4 的东西:1
最大值为:9 的长度为:5 的东西:1
最大值为:9 的长度为:6 的东西:1
最大值为:9 的长度为:7 的东西:1
最大值为:9 的长度为:8 的东西:1
最大值为:9 的长度为:9 的东西:1
最大值为:10 的长度为:1 的东西:1
最大值为:10 的长度为:2 的东西:1
最大值为:10 的长度为:3 的东西:1
最大值为:10 的长度为:4 的东西:1
最大值为:10 的长度为:5 的东西:1
最大值为:10 的长度为:6 的东西:1
最大值为:10 的长度为:7 的东西:1
最大值为:10 的长度为:8 的东西:1
最大值为:10 的长度为:9 的东西:1
最大值为:10 的长度为:10 的东西:1
最大值为:11 的长度为:1 的东西:1
最大值为:11 的长度为:2 的东西:1
最大值为:11 的长度为:3 的东西:1
最大值为:11 的长度为:4 的东西:1
最大值为:11 的长度为:5 的东西:1
最大值为:11 的长度为:6 的东西:1
最大值为:11 的长度为:7 的东西:1
最大值为:11 的长度为:8 的东西:1
最大值为:11 的长度为:9 的东西:1
最大值为:11 的长度为:10 的东西:1
最大值为:11 的长度为:11 的东西:1

如果说是一个递增的一个序列,我们可以得到任何长度的序列(不大于本身值)。但是如果序列发生变化,就不行了。

1
2
3
4
5
6
7
8
9
10
11
最大值为:11 的长度为:1 的东西:1
最大值为:11 的长度为:2 的东西:1
最大值为:11 的长度为:3 的东西:1
最大值为:11 的长度为:4 的东西:1
最大值为:11 的长度为:5 的东西:1
最大值为:11 的长度为:6 的东西:1
最大值为:11 的长度为:7 的东西:1
最大值为:11 的长度为:8 的东西:1
最大值为:11 的长度为:9 的东西:1
最大值为:11 的长度为:10 的东西:1
最大值为:11 的长度为:11 的东西:1

AC代码

https://www.codechef.com/viewsolution/1191801507

心路历程(WA,TLE,MLE……)