原题链接

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

所以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;
}

最新文章

  1. 微信小程序-视图条件渲染
  2. Microsoft Dynamics CRM MVP
  3. type parameters of &lt;T&gt;T cannot be determined; no unique maximal instance exists for type variable T with upper bounds int,java.lang.Object
  4. div+css 定位浅析
  5. 一段网上java常见escape和unescape方法的BUG
  6. MVC3+EF4.1学习系列(九)-----EF4.1其他的一些技巧的使用
  7. Android, BaseAdapter 处理大数据量时的优化
  8. Python实现浏览器自动化操作
  9. [转载] java多线程学习-java.util.concurrent详解(四) BlockingQueue
  10. iOS中 超简单抽屉效果(MMDrawerController)的实现
  11. Javascript中双等号(==)隐性转换机制
  12. php 日期时间类型带毫秒
  13. RHCSA考试真题
  14. yii去掉自动排序功能
  15. luogu P1979 [NOIP2013] 华容道
  16. keil 生成 bin文件
  17. [py]数据结构和算法-冒泡排序
  18. [转]How to Create an Add-in for Microsoft Outlook
  19. C++11 的右值引用
  20. 值得收藏的十二条Jquery随身笔记

热门文章

  1. JavaScript 检测值
  2. formSelects设置不可选择
  3. ibox 的使用
  4. win7 配置 用户/系统DSN (解决plsql odbc导入器 DSN 没有选项)
  5. JS实现级联菜单
  6. JavaScript(js)笔记
  7. DevExpress WPF控件记录
  8. 【思维】Kenken Race
  9. 并不对劲的CSP-S2019
  10. hdu 1506 最大子矩阵面积