「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 + 10, N = 27; const int mod = 12015858;int n; int l[N], r[N];char str[N]; inline void gin(int &x) {scanf("%s", str);if(!isdigit(str[0])) x = -(str[0] - 'a' + 1);else {x = 0;for (int i=0; str[i]; ++i) x = (x<<3) + (x<<1) + str[i] - '0';} }int head[N], nxt[M], to[M], tot = 0; 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 = 0) {for (int i=1; i<=100000; ++i) f[x][i] = 1;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=1; j<=100000; ++j) {if(l[y] < 0) {if(j <= r[y]) f[x][j] = 1ll * f[x][j] * (s[y][r[y]] - s[y][j-1]) % mod;else f[x][j] = 0;}if(r[y] < 0) {if(l[y] <= j) f[x][j] = 1ll * f[x][j] * (s[y][j] - s[y][l[y]-1]) % mod;else f[x][j] = 0;}if(f[x][j] < 0) f[x][j] += mod;}}for (int i=1; i<=100000; ++i) {s[x][i] = s[x][i-1] + 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=1; i<=n; ++i) {gin(l[i]), gin(r[i]);// cout << l[i] << ' ' << r[i] << endl;if(l[i] < 0) adde(-l[i], i);if(r[i] < 0) adde(-r[i], i);}ll ans = 1, times;for (int i=1; i<=n; ++i) {if(l[i] < 0 || r[i] < 0) continue;dfs(i); ans = ans * (s[i][r[i]] - s[i][l[i]-1]) % mod;}ans = (ans + mod) % mod;cout << ans;return 0; }
View Code
转载于:https://www.cnblogs.com/galaxies/p/20170620_a.html
「6月雅礼集训 2017 Day4」暴力大神hxx相关推荐
- 「6月雅礼集训 2017 Day4」qyh(bzoj2687 交与并)
原题传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2687 [题目大意] 给出若干区间,求一个区间的大于等于2的子集,使得 |区间并| 和 | ...
- 「6月雅礼集训 2017 Day7」回转寿司
[题目大意] 给一个n个数的序列,q次操作,每次选择区间$[l,r]$,给出数p,对于区间$[l,r]$的每个数$x$,做如下操作: 如果$x > p$,就交换$x$和$p$.求每次操作后$p$ ...
- 「6月雅礼集训 2017 Day5」吃干饭
[题目大意] 询问[L,R]中选若干个数异或起来得到的答案集合大小.多组数据. 对于50%的数据,$R - L \leq 10^4$ 对于100%的数据,$R - L \leq 10^{18}, T ...
- 「6月雅礼集训 2017 Day2」B
[题目大意] 求n*n的棋盘,每行每列都有2个黑格子的方案数. n<=10^7 [题解] zzq的做法好神奇啊 行列建点,二分图 左边有i个点,右边有j个点的方案数 f[i,j] 左边有i个点, ...
- Loj 6036 「雅礼集训 2017 Day4」编码 - 2-sat
题目传送门 唯一的传送门 题目大意 给定$n$个串,每个串只包含 '0','1','?' ,其中 '?' 至多在每个串中出现1次,它可以被替换为 '0' 或 '1' .问是否可能任意两个不同的串不满足 ...
- Loj #6503. 「雅礼集训 2018 Day4」Magic
Loj #6503. 「雅礼集训 2018 Day4」Magic 题目描述 前进!前进!不择手段地前进!--托马斯 · 维德 魔法纪元元年. 1453 年 5 月 3 日 16 时,高维碎片接触地球. ...
- 数据结构二之线段树Ⅱ——KiKi‘s K-Number,ball,The Child and Sequence,「雅礼集训 2017 Day1」市场,Atlantis
值域线段树+势能线段树+扫描线 KiKi's K-Number ball The Child and Sequence 「雅礼集训 2017 Day1」市场 Atlantis KiKi's K-Num ...
- [LOJ 6042]「雅礼集训 2017 Day7」跳蚤王国的宰相(树的重心+贪心)
[LOJ 6042]「雅礼集训 2017 Day7」跳蚤王国的宰相 description solution 一个到所有节点距离和最小的节点 ⇔\Leftrightarrow⇔ 树的重心(满足最重的儿 ...
- #6029. 「雅礼集训 2017 Day1」市场(势能,区间除)
#6029. 「雅礼集训 2017 Day1」市场 用线段树维护数列,区间上维护最大最小值,区间和还有标记,修改时,区间加直接做,而区间除时,递归到线段树上某一区间,如果这一操作等价于区间加(也就是最 ...
最新文章
- CNN网络优化加速开源代码汇总
- 年中盘点:2021年炙手可热的10家数据科学和机器学习初创公司
- Keras【Deep Learning With Python】手写数字识别
- rⅰd的意思_计量经济学练习题
- 无符号数和有符号数之间赋值和大小比较
- STM32工作笔记0022---STM32F1开发版 GPIO口工作原理
- poj 1035 Spell checker(hash)
- url编码解码的三种方式
- 纯福利文章、送5本Java核心技术(不定期送福利)
- 交通灯matlab程序,毕业论文设计(交通灯).doc
- 浪潮存储助力方特动漫为《熊出没-狂野大陆》动物角色披上“动感毛发”
- 跨站脚本攻击(XSS)及防范措施
- Wordpress 网站设计入门 把Wordpress放在一个独立子目录下
- 核心单词Word List 46
- 【视觉-单目三维重建-理论篇】单目视觉三维重建----论文调研1
- JS HTML5仿微信朋友圈特效
- 商家又一必争之地!支付宝小程序一周年,带来哪些机遇?
- 在Python中画炫酷的K线图
- Unity中的数学基础——弧度与角度
- 华科计算机博导刘云生论文,华科论文式要求.doc