原题链接

写到一半发现写不下去了。。。

所以orz xyz32768,您去看这篇题解吧,思路很清晰,我之前写的胡言乱语与之差距不啻天渊

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <random>
#include <string>
#include <vector>
#include <cmath>
#include <ctime>
#include <queue>
#include <map>
#include <set> #define IINF 0x3f3f3f3f3f3f3f3fLL
#define u64 unsigned long long
#define pii pair<int, int>
#define mii map<int, int>
#define u32 unsigned int
#define lbd lower_bound
#define ubd upper_bound
#define INF 0x3f3f3f3f
#define vi vector<int>
#define ll long long
#define mp make_pair
#define pb push_back
#define is insert
#define se second
#define fi first
#define ps push using namespace std; #define MOD 666623333 void add(int &x, int y) {
x = (x + y) % MOD;
if (x < 0) x += MOD;
} int Add(int x, int y) {
return (x + y + MOD) % MOD;
} void mul(int &x, int y) {
x = 1LL * x * y % MOD;
if (x < 0) x += MOD;
} int Mul(int x, int y) {
return (1LL * x * y % MOD + MOD) % MOD;
} int fpow(int x, int p) {
int ret = 1;
while(p) {
if (p & 1) mul(ret, x);
mul(x, x);
p >>= 1;
}
return ret;
} const int MAXN = 2000;
int n, x, q, h[MAXN + 5], g[MAXN + 5], f[MAXN + 5][MAXN + 5], sum[MAXN + 5][MAXN + 5], l[MAXN + 5], r[MAXN + 5], tmp[MAXN + 5], ans;
pii qrs0[MAXN + 5], qrs[MAXN + 5]; void init() {
cin >> n >> x >> q;
for (int i = 1; i <= q; ++i)
cin >> qrs0[i].fi >> qrs0[i].se;
int tot = 0;
sort(qrs0 + 1, qrs0 + q + 1);
for (int i = 1; i <= q; ++i) {
if (i > 1 && qrs0[i].fi == qrs0[i - 1].fi) continue;
while (tot && qrs[tot].se >= qrs0[i].se) tot--;
qrs[++tot] = qrs0[i];
}
q = tot;
for (int i = 1; i <= q; ++i) tmp[qrs[i].se + 1]--, tmp[qrs[i].fi]++;
for (int i = 2; i <= n; ++i) tmp[i] += tmp[i - 1];
for (int i = 1; i <= n; ++i) {
if (!tmp[i]) {
int j = 0;
while (j + 1 <= q && qrs[j + 1].se < i) j++;
r[i] = j, l[i] = j + 1;
}
else {
int j = 0;
while (j + 1 <= q && qrs[j + 1].se < i) j++;
l[i] = ++j;
while (j + 1 <= q && qrs[j + 1].fi <= i) j++;
r[i] = j;
}
}
} void solve() {
f[0][0] = sum[0][0] = 1;
int p = -1;
for (int i = 1; i <= n; ++i) {
while (p < i && r[p + 1] + 1 < l[i]) p++;
sum[0][i] = 1;
for (int j = 1; j <= n; ++j) {
f[i][j] = Add(sum[j - 1][i - 1], (~p ? -sum[j - 1][p] : 0));
sum[j][i] = Add(sum[j][i - 1], f[i][j]);
}
if (r[i] == q)
for (int j = 1; j <= n; ++j)
add(g[j], f[i][j]);
}
for (int i = 1; i <= x; ++i)
for (int j = 1; j <= n; ++j)
add (h[i], Mul(g[j], Mul(fpow(i, j), fpow(x - i, n - j))));
for (int i = 1; i <= x; ++i)
add (ans, Mul(i, Add(h[i], -h[i - 1])));
mul(ans, fpow(fpow(x, n), MOD - 2));
} int main() {
init();
solve();
cout << ans << endl;
return 0;
}

洛谷P3600随机数生成器——期望+DP的更多相关文章

  1. 洛谷P3600 随机数生成器(期望dp 组合数)

    题意 题目链接 Sol 一条重要的性质:如果某个区间覆盖了另一个区间,那么该区间是没有用的(不会对最大值做出贡献) 首先不难想到枚举最终的答案\(x\).这时我们需要计算的是最大值恰好为\(x\)的概 ...

  2. 洛谷 P3600 - 随机数生成器(期望 dp)

    题面传送门 我竟然独立搞出了这道黑题!incredible! u1s1 这题是我做题时间跨度最大的题之一-- 首先讲下我四个月前想出来的 \(n^2\log n\) 的做法吧. 记 \(f(a)=\m ...

  3. luogu P3600 随机数生成器【dp】

    把期望改成方案数最后除一下,设h[i]为最大值恰好是i的方案数,那么要求的就是Σh[i]*i 首先包含其他区间的区间是没有意义的,用单调栈去掉 然后恰好不好求,就改成h[i]表示最大值最大是i的方案数 ...

  4. [洛谷P5147]随机数生成器

    题目大意:$$f_n=\begin{cases}\frac{\sum\limits_{i=1}^nf_i}n+1&(n>1)\\0&(n=1)\end{cases}$$求$f_n ...

  5. 洛谷P3306 随机数生成器

    题意:给你一个数列,a1 = x,ai = (A * ai-1 + B) % P,求第一个是t的是哪一项,或者永远不会有t. 解:循环节不会超过P.我们使用BSGS的思想,预处理从t开始跳√P步的,插 ...

  6. Luogu P3600 随机数生成器

    Luogu P3600 随机数生成器 题目描述 sol研发了一个神奇的随机数系统,可以自动按照环境噪音生成真·随机数. 现在sol打算生成\(n\)个\([1,x]\)的整数\(a_1...a_n\) ...

  7. 洛谷 P5279 - [ZJOI2019]麻将(dp 套 dp)

    洛谷题面传送门 一道 dp 套 dp 的 immortal tea 首先考虑如何判断一套牌是否已经胡牌了,考虑 \(dp\)​​​​​.我们考虑将所有牌按权值大小从大到小排成一列,那我们设 \(dp_ ...

  8. P3600 随机数生成器

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  9. 洛谷2344 奶牛抗议(DP+BIT+离散化)

    洛谷2344 奶牛抗议 本题地址:http://www.luogu.org/problem/show?pid=2344 题目背景 Generic Cow Protests, 2011 Feb 题目描述 ...

随机推荐

  1. rdbtool

    https://www.cnblogs.com/wjoyxt/p/10577361.html https://github.com/sripathikrishnan/redis-rdb-tools h ...

  2. 斐波那契数列Fibonacci问题—动态规划

    斐波那契数列定义 Fibonacci array:1,1,2,3,5,8,13,21,34,... 在数学上,斐波那契数列是以递归的方法来定义: F(0) = 0 F(1) = 1 F(n) = F( ...

  3. Django soft-delete软删除

    在django中,实现这个功能很简单,我们采用一个字段用来保存删除的时间.若记录没有被删除,那么设置该值为None,如果被删除,那么设置时间为删除的时间. class BaseSchema(model ...

  4. java学习(东软睿道)2019-09-06(预课)《随堂笔记》

    2019-09-06 13:19:56 1.变量:java  名称 2.服务器server 客户端client                         uft8   ascll 3.Java ...

  5. (十一)springMvc 异常处理

    文章目录 思路 自定义异常处理类 全局异常处理器 配置全局异常处理器 思路 在 springMvc 中,异常一层一层的往上抛,最后抛给 前端控制器,前端控制器内部会去找 全局异常处理器(一个系统只会有 ...

  6. 【背包问题】PACKING

    题目描述 It was bound to happen.  Modernisation has reached the North Pole.  Faced with escalating costs ...

  7. 【转】Entity Framework 6 Code First 实践系列(1):实体类配置-根据依赖配置关系和关联

    本文转自:http://www.cnblogs.com/easygame/p/3622893.html EF实体类的配置可以使用数据注释或Fluent API两种方式配置,Fluent API配置的关 ...

  8. Python http.server中获取Post的请求报文

    今天在自学http.server请求命令, 各个字段都很好理解, 但唯独想打印获取Post请求报文时, 被难住了, 网上找了很多帖子, 官方的文档也刷了几遍, 但没有一个明确的答复. 后来不经意间看到 ...

  9. CSS实现单选按钮

    import React from 'react' import PropTypes from 'prop-types' import CX from 'classnames' import _ fr ...

  10. mysql数据库的锁表与解决办法(原博客url:http://www.cnblogs.com/wanghuaijun/p/5949934.html)

    MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level loc ...