首页 > 其他分享 >洛谷 P3750 [六省联考 2017] 分手是祝愿

洛谷 P3750 [六省联考 2017] 分手是祝愿

时间:2023-02-02 22:00:53浏览次数:70  
标签:typedef 六省 int long maxn ans P3750 联考 define

洛谷传送门

考虑先求出哪些点一定要按,然后 dp。

设 \(f_i\) 为当前还有 \(i\) 个点要按的期望步数。转移就是 \(f_i = \dfrac{i}{n} f_{i-1} + \dfrac{n-i}{n} f_{i+1}\),初值 \(f_{p} = p,\ p \in [1,k]\)。

这个没办法化简,可能可以高斯消元,但是没写。

考虑换一种 dp 状态。设 \(f_i\) 为当前还有 \(i\) 个点要按 且第一次变为只有 \(i-1\) 个点要按 的期望步数。转移为 \(f_i = \dfrac{i}{n} + \dfrac{n-i}{n} (1 + f_{i+1} + f_i)\),初值 \(f_n = 1\)。这个显然可以解方程然后递推。

于是就做完了。时间复杂度 \(O(n \ln n)\)。

code
/*

p_b_p_b txdy
AThousandSuns txdy
Wu_Ren txdy
Appleblue17 txdy

*/

#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;

const int maxn = 100100;
const ll mod = 100003;

int n, m, a[maxn];
ll f[maxn], inv[maxn], fac[maxn];
vector<int> vc[maxn];

void solve() {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; ++i) {
		scanf("%d", &a[i]);
		for (int j = i + i; j <= n; j += i) {
			vc[j].pb(i);
		}
	}
	for (int i = n; i; --i) {
		for (int x : vc[i]) {
			a[x] ^= a[i];
		}
	}
	int k = 0;
	for (int i = 1; i <= n; ++i) {
		k += a[i];
	}
	fac[0] = 1;
	for (int i = 1; i <= n; ++i) {
		fac[i] = fac[i - 1] * i % mod;
	}
	if (k <= m) {
		printf("%lld\n", fac[n] * k % mod);
		return;
	}
	inv[1] = 1;
	for (int i = 2; i <= n; ++i) {
		inv[i] = (mod - mod / i) * inv[mod % i] % mod;
	}
	f[n] = 1;
	for (int i = n - 1; i; --i) {
		f[i] = (n + (n - i) * f[i + 1] % mod) % mod * inv[i] % mod;
	}
	ll ans = m;
	for (int i = k; i > m; --i) {
		ans = (ans + f[i]) % mod;
	}
	ans = ans * fac[n] % mod;
	printf("%lld\n", ans);
}

int main() {
	int T = 1;
	// scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:typedef,六省,int,long,maxn,ans,P3750,联考,define
From: https://www.cnblogs.com/zltzlt-blog/p/17087555.html

相关文章

  • 【题解】P3750 [六省联考 2017] 分手是祝愿
    出题老哥收收味吧,阿米奈!记一下几个常用的手段。昨晚CF的D是差不多的思路吧,不然不会来做。思路期望dp.先做一些准备工作,求一下逆元和每个数的因数,复杂度\(O(n\l......
  • P7518 [省选联考 2021 A/B 卷] 宝石
    非常有意义的一道题,虽然不算太难。非常好题目,英雄联盟,爱来自瓷器。戳我看题题意给一定一个\(n\)个点的树,每个点有一个颜色,点\(u\)的颜色为\(w_u\)。给定一个\(P_......
  • 题解 P8294 [省选联考 2022] 最大权独立集问题
    Solution根据一些逝去的记忆可以得到一个DP状态:\(f_{u,x,y}\)表示\(u\)这棵子树,\(x\)从子树出去,\(y\)进来这棵子树。然后讨论一下状态转移,可以暴力枚举状态,暴力枚......
  • luogu P5291 [十二省联考 2019] 希望
    题面传送门真的很想吐。题目的意思大概就是在一棵树上选出\(k\)个联通块,使得这\(k\)个联通块有交。显然联通块的交还是联通块,因此转化为对联通块计数。而联通块个数等于......
  • 十二省联考 2019 题解
    Day1B字符串问题朴素的想法是,建一张\(n_a+n_b\)个点的有向图\(G\)。对于一个支配关系\((x,y)\),从\(x\)向\(y+n_a\)连边。此外,枚举\(1\lei\len_b\),对于每个......
  • P8294 [省选联考 2022] 最大权独立集问题
    题解可以发现对于一个子树,假设移出的点为\(u\),移入的点到\(v\),那么这棵子树的根一定是\(LCA(u,v)\).于是可以设\(dp_{u,v}\)表示在以\(LCA(u,v)\)为根的子树......
  • P8290 [省选联考 2022] 填树
    https://www.luogu.com.cn/problem/P8290题解记\(P(l,r)\)表示最小值为\(l\)(至少\(1\)个),其它数在\([l,r]\)的第一问的答案,\(Q(l,r)\)表示最小值为\(l\)(至少\(1\)个)......
  • P8293 [省选联考 2022] 序列变换
    https://www.luogu.com.cn/problem/P8293题解题意转化:将括号序列建成一棵树,操作1相当于把一个点和它的儿子都挂到同一深度的另一个点下面,操作2相当于表示同一深度的......
  • P8292 [省选联考 2022] 卡牌
    https://www.luogu.com.cn/problem/P8292题解先把小于等于\(\sqrt{2000}\)的质数打一个表,发现只有\(14\)个,其中第\(14\)个是\(43\).令前\(14\)个质数为小质数,其它的......
  • [省选联考 2021 B 卷] 数对 题解
    题目描述给定\(n\)个正整数\(a_i\),请你求出有多少个数对\((i,j)\)满足\(1\lei\len\),\(1\lej\len\),\(i\nej\)且\(a_i\)是\(a_j\)的倍数。提示对于......