首页 > 其他分享 >【题解】Luogu[P3750] [六省联考 2017] 分手是祝愿

【题解】Luogu[P3750] [六省联考 2017] 分手是祝愿

时间:2023-05-13 22:35:07浏览次数:52  
标签:cnt 按到 六省 int 题解 inv -- dfrac 联考

Link→

小清新 dp 题,纪念自己的 700 ac (

一个点只有两个状态开和不开,且按两下相当于没按,我们可以从大到小有亮的就按一下,如果我们按到了不需要按的键,就需要再按一下使他变回来。

设 \(f_i\) 表示 \(i\) 个正确选择变为 \(i-1\) 个的期望操作次数。

则有 \(\dfrac{i}{n}\) 概率按到需要按的灯,有 \(\dfrac{n - i}{n}\) 概率按到不需要按的灯。

\(f_i = \dfrac{i}{n} + (1 - \dfrac{i}{n}) \cdot (1 + f_{i+1} + f_i)\)

化简:

\(f_i = \dfrac{i}{n} + \dfrac{(n-i)\cdot f_{i+1}}{i}\)

我们计算必须要按的按键次数 \(cnt\),若 \(cnt < k\) 显然答案就是 \(cnt\),否则答案就是 \(\sum^{i\leq cnt}_{i=k+1}{f_i}\),加上剩下 \(k\) 的期望。

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int _ = 1e5 + 10, mod = 1e5 + 3;
int n, k; int a[_];
int inv[_], f[_], ans, cnt;
vector< int > g[_];
signed main() {
  cin >> n >> k;
  for(int i = 1; i <= n; ++i)
    cin >> a[i];
  inv[1] = 1;
  for(int i = 2; i <= n; ++i)
    inv[i] = ((mod - mod / i) * inv[mod % i] % mod) % mod;
  for(int i = 1; i <= n; ++i)
    for(int j = i; j <= n; j += i)
      g[j].push_back(i);
  for(int i = n; i >= 1; --i)
    if(a[i]) {
      for(int j = 0; j < g[i].size(); ++j) a[g[i][j]] ^= 1;
      cnt++;
    }
  f[n] = 1;
  for(int i = n - 1; i > k; --i)
    f[i] = (n + (n - i) * f[i + 1]) * inv[i] % mod;
  for(int i = k; i >= 1; --i) f[i] = 1;
  for(int i = 1; i <= cnt; ++i) ans = (ans + f[i]) % mod;
  for(int i = 1; i <= n; ++i) ans = (ans * i) % mod;
  cout << ans << endl;
  return 0;
}

标签:cnt,按到,六省,int,题解,inv,--,dfrac,联考
From: https://www.cnblogs.com/agrumestly/p/17398365.html

相关文章

  • 【题解】Luogu[P4900] 食堂
    一到推柿子题。题意即求\(\sum\limits^{n}_{i=1}\sum\limits^{i}_{j=1}\left\{\frac{i}{j}\bmodP\right\}\)对于\(\frac{i}{j}\bmodP\)我们知道即为\(i\)乘上\(j\)的逆元,即为\(i\cdot\mathrm{inv}(j)\)故:\[\begin{aligned}\sum^{n}_{i=1}\sum^{i}_{j=1}\l......
  • 【题解】Luogu[P6003] USACO20JAN Loan Repayment S
    模拟赛第一题(9pts考虑暴力。枚举\(x\),对于每个\(x\),模拟\(k\)天,判断其是否合法,找出最大的\(x\)。时间复杂度:\(O(n^2)\)36pts考虑优化先前暴力算法。我们不难发现当\(x\)合法时,必然有合法\(x_1\),当且仅当\(x_1<x\)。故\(x\)具有单调性,考虑二分答案。对于\(x......
  • 【题解】Luogu[P8818] CSP-S 2022 策略游戏
    一道简单区间rmq分类讨论题,考场上最后5分钟想出来,没写出来,退役了……给定两个序列\(A_{1},\dots,A_{n}\);\(B_1,\dots,B_n\)规定\(C_{i,j}=A_i\timesB_i\)。题目说小L和小Q必定选择最优策略,而小L先选,小Q后选,小L要使得\(C_{i,j}\)尽可能大,小Q要使得\(C_{i,j}\)......
  • 【题解】Luogu[P1879] [USACO06NOV]Corn Fields G
    Link→状压dp典题,看数据范围就能多半猜到是状压。\(M\)行\(N\)列很不舒服,本篇题解规定为\(N\)行\(M\)列。因为说没有哪两块草地相连,我们不妨一行一行考虑,一行中每格只可能是\(0\)或\(1\),所以一行的总不同状态数是\(2^M\)。我们用二进制表示每一行的状态,对于每一行,暴......
  • 【题解】Luogu[P1967] NOIP2013 提高组 货车运输
    Link→很容易想到一个暴力做法,就是跑一遍Floyd,\(F_{i,j}\)表示\(i\)到\(j\)最大载重量,转移\(F_{i,j}=\max\{F_{i,j},\min\{F_{i,k},F_{k,j}\}\}\)。显然时间复杂度\(O(n^3)\)是过不了的。我们发现,因为是求两点路径中使得最小值最大,实际上有一些较小的路径是不会走......
  • CF1698F题解
    考虑一个函数\(f(a)\),它的返回值是一个二维数组\(b\),接受值是一个数组\(a\)。对于所有\(i=1\ton-1\)的\(i\),把\(b_{a_i}{a_{i+1}}++\),然后返回\(b\)。\(f(a)!=f(b)\)且\(a_1=b_1,a_n=b_n\)是无解的充要条件,因为显然对于数组的每次翻转操作它的\(f\)返回值都不会变。\(f(a)!=f(b......
  • CF1777D Score of a Tree 题解
    题目简述给你一个\(n\)个结点根为\(1\)的树。在\(t=0\)时,每个结点都有一个值,为\(0\)或\(1\)。在每一个\(t>0\)时,每个结点的值都会变成其子结点在\(t-1\)时的值的异或和。定义\(S(t)\)为\(t\)时所有结点值的和。定义\(F(A)\)为树在\(0\let\le10^......
  • CF1777C Quiz Master题解
    题目简述给定一个长度为\(n\)的正整数序列\(a\),以及一个正整数\(m\)。在序列\(a\)中选出一个长度为子序列(不是子段)\(b\),\(\foralli\in[1,m],\existsb_j,b_j\)能整除\(i\)。求所有满足条件的序列\(b\)的极差(最大值于最小值的差)的最小值;若无满足条件序列\(b\)......
  • Educational Codeforces Round 148 (Rated for Div. 2) A-D 题解
    比赛地址A.NewPalindrome题意:给一个回文串,判断是否能重新排成另一个回文串Solution存不同对的个数即可voidsolve(){ strings; cin>>s; intn=s.length(); set<char>st; for(inti=0;i<n/2;i++) { st.insert(s[i]); } if(st.size()>1)cout<<"YES\n"; els......
  • 「SDOI2017」数字表格 题解
    4114「SDOI2017」数字表格题解个人评价:好题且套路多算法标签莫比乌斯反演题目难度:2700题面看我分析题面多组数据,每次给出\(n,m\),求解\(\prod_{i=1}^n\prod_{j=1}^mF_{gcd(i,j)}\),其中\(F\)是斐波那契数列问题分析第一眼化出这个式子肯定是一脸懵,毕竟我们现在做的大......