[纪中][总结]2021.08.09【NOIP提高B组】模拟

2021.08.09【NOIP提高B组】模拟

狗妈OJ \(link\)

赛时

T1

感觉可以骗分。
思路如下:
在 b串 里面寻找回文子序列,再判断这个子序列是否是 a串 和 b串 的公共子序列。
如果成立,那么就取 \(max\) 这个子序列的长度

T2

感觉不可做

T3

前缀和乱水

T4

神仙题,显然不可做

赛后

得分 100 + 0 + 30 + 0
后面发现 T3 要用二分答案
而且 T4 也不是什么神仙题,虽然赛时没几个人 A 了, 但是赛后没一会就一大堆人 A 了。

所以在询问大佬的帮助下,最后可以得出今天题目的 AC 做法

T1

同赛时

T2

对于一个闭环,就缩点,把图变成一个有向无环图,再就是 DP.

T3

乱搞前缀和和二分

T4

洛谷 \(link\)
组合数学
请各位理性理解

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n, k;
int main ()
{
	freopen ("color.in", "r", stdin);
	freopen ("color.out", "w", stdout);
	scanf ("%lld%lld", &n, &k);
	ll as = k * (k - 1) / 2, sa = k * (k - 1) * (k - 2) / 6;
	if (n == 1) printf ("%lld", as * 2 + sa * (3 * (1 << 19) - 6));
	if (n == 2) printf ("%lld", sa * 96);
	if (n == 3) printf ("%lld", as * 2 + sa * 18);
	if (n == 4) printf ("%lld", as * 2 + sa * (3 * (1 << 13) - 6));
	if (n == 5) printf ("%lld", sa * 12);
	if (n == 6) printf ("%lld", sa * 6);
	if (n == 7) printf ("%lld", sa * 96);
	if (n == 8) printf ("%lld", as * 2 + sa * 1073741820);
	return 0; 
}
上一篇:题解 -- 希望


下一篇:JavaScript函数篇