「6月雅礼集训 2017 Day4」暴力大神hxx
【题目大意】
给出一个n重循环,每重循环有范围$[l, r]$,其中$l$,$r$可能是之前的变量,也可能是常数。求循环最底层被执行了多少次。
其中,保证每个循环的$l$,$r$最多有一个是之前的变量。设所有常数最大值为C。
$1 \leq n \leq 26, 1\leq C \leq 10^5$
【题解】
发现构成了一个森林。
树形dp,稍微推一些循环交换顺序等等的性质,然后乘在一起就行了。
大概设f[x,i]表示到了x这个点,x的取值为i,x的子树的执行次数。
转移用个前缀和优化即可。复杂度$O(nC)$
# include <stdio.h>
# include <string.h>
# include <iostream>
# include <algorithm> using namespace std; typedef long long ll;
typedef unsigned long long ull;
typedef long double ld; const int M = 1e5 + , N = ;
const int mod = ; int n;
int l[N], r[N]; char str[N];
inline void gin(int &x) {
scanf("%s", str);
if(!isdigit(str[])) x = -(str[] - 'a' + );
else {
x = ;
for (int i=; str[i]; ++i) x = (x<<) + (x<<) + str[i] - '';
}
} int head[N], nxt[M], to[M], tot = ;
inline void add(int u, int v) {
++tot; nxt[tot] = head[u]; head[u] = tot; to[tot] = v;
}
inline void adde(int u, int v) {
// cout << u << " --> " << v << endl;
add(u, v), add(v, u);
} int f[N][M], s[N][M];
// 到了x这个点,x的取值为i
inline void dfs(int x, int fa = ) {
for (int i=; i<=; ++i) f[x][i] = ;
for (int i=head[x]; i; i=nxt[i]) {
if(to[i] == fa) continue;
dfs(to[i], x);
int y = to[i];
for (int j=; j<=; ++j) {
if(l[y] < ) {
if(j <= r[y]) f[x][j] = 1ll * f[x][j] * (s[y][r[y]] - s[y][j-]) % mod;
else f[x][j] = ;
}
if(r[y] < ) {
if(l[y] <= j) f[x][j] = 1ll * f[x][j] * (s[y][j] - s[y][l[y]-]) % mod;
else f[x][j] = ;
}
if(f[x][j] < ) f[x][j] += mod;
}
}
for (int i=; i<=; ++i) {
s[x][i] = s[x][i-] + f[x][i];
if(s[x][i] >= mod) s[x][i] -= mod;
// if(i <= 100) cout << x << ' ' << i << ' ' << f[x][i] << endl;
}
} int main() {
// freopen("car.in", "r", stdin);
// freopen("car.out", "w", stdout);
cin >> n;
for (int i=; i<=n; ++i) {
gin(l[i]), gin(r[i]);
// cout << l[i] << ' ' << r[i] << endl;
if(l[i] < ) adde(-l[i], i);
if(r[i] < ) adde(-r[i], i);
} ll ans = , times;
for (int i=; i<=n; ++i) {
if(l[i] < || r[i] < ) continue;
dfs(i);
ans = ans * (s[i][r[i]] - s[i][l[i]-]) % mod;
}
ans = (ans + mod) % mod;
cout << ans; return ;
}
「6月雅礼集训 2017 Day4」暴力大神hxx的更多相关文章
- 「6月雅礼集训 2017 Day4」qyh(bzoj2687 交与并)
原题传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2687 [题目大意] 给出若干区间,求一个区间的大于等于2的子集,使得 |区间并| 和 | ...
- 「6月雅礼集训 2017 Day4」寻找天哥
[题目大意] 给出$n$个三维向量,设当前向量长度为$L$,每次沿着向量等概率走$[0,L]$个长度.一个球每秒半径增加1个长度,直到覆盖位置,每秒耗能为球体积,求总耗能的期望. 设最后半径为R,那么 ...
- 「6月雅礼集训 2017 Day10」quote
[题目大意] 一个合法的引号序列是空串:如果引号序列合法,那么在两边加上同一个引号也合法:或是把两个合法的引号序列拼起来也是合法的. 求长度为$n$,字符集大小为$k$的合法引号序列的个数.多组数据. ...
- 「6月雅礼集训 2017 Day11」delight
[题目大意] 有$n$天,每天能吃饭.睡觉.什么事也不干 每天吃饭的愉悦值为$e_i$,睡觉的愉悦值为$s_i$,什么都不干愉悦值为0. 要求每连续$k$天都要有至少$E$天吃饭,$S$天睡觉. 求最 ...
- 「6月雅礼集训 2017 Day11」jump
[题目大意] 有$n$个位置,每个位置有一个数$x_i$,代表从$i$经过1步可以到达的点在$[\max(1, i-x_i), \min(i+x_i, n)]$中. 定义$(i,j)$的距离表示从$i ...
- 「6月雅礼集训 2017 Day11」tree
[题目大意] 给出一棵带权树,有两类点,一类黑点,一类白点. 求切断黑点和白点间路径的最小代价. $n \leq 10^5$ [题解] 直接最小割能过..但是树形dp明显更好写 设$f_{x,0/1/ ...
- 「6月雅礼集训 2017 Day10」perm(CodeForces 698F)
[题目大意] 给出一个$n$个数的序列$\{a_n\}$,其中有些地方的数为0,要求你把这个序列填成一个1到$n$的排列,使得: $(a_i, a_j) = 1$,当且仅当$(i, j) = 1$.多 ...
- 「6月雅礼集训 2017 Day8」route
[题目大意] 给出平面上$n$个点,求一条连接$n$个点的不相交的路径,使得转换的方向符合所给长度为$n-2$的字符串. $n \leq 5000$ [题解] 考虑取凸包上一点,然后如果下一个是‘R' ...
- 「6月雅礼集训 2017 Day8」gcd
[题目大意] 定义times(a, b)表示用辗转相除计算a和b的最大公约数所需步骤. 那么有: 1. times(a, b) = times(b, a) 2. times(a, 0) = 0 3. ...
随机推荐
- TCP系列35—窗口管理&流控—9、紧急机制
一.概述 我们在最开始介绍TCP头结构的时候,里面有个URG的标志位,还有一个Urgent Pointer的16bits字段.当URG标志位有效的时候,Urgent Poinert用来指示紧急数据的相 ...
- win7系统日志分支删除方法
这篇日志有问题,自己亲身尝试失败,这里只提供思路,谢谢(改天突破再做修改) 之前电脑装过德国的叫啥子软件来着,当时在系统自动创建了日志,后来软件卸载了,发现还是有这个日志主键,(我有强迫症)心里不爽, ...
- 将sublime添加到右键菜单
sublime text 添加到鼠标右键功能: 把以下内容复制并保存到文件,重命名为:sublime_addright.reg,然后双击就可以了. (注意:需要把下面代码中的Sublime的安装目录( ...
- IIS部署网部常用问题汇总
1.unrecognized attribute 'targetframework' A: 需要注册.net framework到iis.步骤如下: (1)'Start' -> 'CMD' (2 ...
- CDN概念基本介绍
CDN概念基本介绍 一 . CDN简介 什么是CDN? CDN的全称是Content Delivery Network,即内容分发网络. 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的 ...
- 2018牛客多校第四场 J.Hash Function
题意: 给出一个已知的哈希表.求字典序最小的插入序列,哈希表不合法则输出-1. 题解: 对于哈希表的每一个不为-1的数,假如他的位置是t,令s = a[t]%n.则这个数可以被插入当且仅当第s ~ t ...
- [BZOJ2961] 共点圆 [cdq分治+凸包]
题面 BZOJ传送门 思路 首先考虑一个点$(x_0,y_0)$什么时候在一个圆$(x_1,y_1,\sqrt{x_1^2+y_1^2})$内 显然有:$x_1^2+y_1^2\geq (x_0-x_ ...
- BZOJ1057:[ZJOI2007]棋盘制作——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1057 https://www.luogu.org/problemnew/show/P1169 国际象 ...
- [Leetcode] gas station 气站
There are N gas stations along a circular route, where the amount of gas at station i isgas[i]. You ...
- BZOJ4897 [Thu Summer Camp2016]成绩单 【dp】
题目链接 BZOJ4897 题解 发现我们付出的代价与区间长度无关,而与区间权值范围有关 离散化一下权值 我们设\(f[l][r][x][y]\)表示区间\([l,r]\)消到只剩权值在\([x,y] ...