【题目大意】

给出一个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相关推荐

  1. 「6月雅礼集训 2017 Day4」qyh(bzoj2687 交与并)

    原题传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2687 [题目大意] 给出若干区间,求一个区间的大于等于2的子集,使得 |区间并| 和 | ...

  2. 「6月雅礼集训 2017 Day7」回转寿司

    [题目大意] 给一个n个数的序列,q次操作,每次选择区间$[l,r]$,给出数p,对于区间$[l,r]$的每个数$x$,做如下操作: 如果$x > p$,就交换$x$和$p$.求每次操作后$p$ ...

  3. 「6月雅礼集训 2017 Day5」吃干饭

    [题目大意] 询问[L,R]中选若干个数异或起来得到的答案集合大小.多组数据. 对于50%的数据,$R - L \leq 10^4$ 对于100%的数据,$R - L \leq 10^{18}, T ...

  4. 「6月雅礼集训 2017 Day2」B

    [题目大意] 求n*n的棋盘,每行每列都有2个黑格子的方案数. n<=10^7 [题解] zzq的做法好神奇啊 行列建点,二分图 左边有i个点,右边有j个点的方案数 f[i,j] 左边有i个点, ...

  5. Loj 6036 「雅礼集训 2017 Day4」编码 - 2-sat

    题目传送门 唯一的传送门 题目大意 给定$n$个串,每个串只包含 '0','1','?' ,其中 '?' 至多在每个串中出现1次,它可以被替换为 '0' 或 '1' .问是否可能任意两个不同的串不满足 ...

  6. Loj #6503. 「雅礼集训 2018 Day4」Magic

    Loj #6503. 「雅礼集训 2018 Day4」Magic 题目描述 前进!前进!不择手段地前进!--托马斯 · 维德 魔法纪元元年. 1453 年 5 月 3 日 16 时,高维碎片接触地球. ...

  7. 数据结构二之线段树Ⅱ——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 ...

  8. [LOJ 6042]「雅礼集训 2017 Day7」跳蚤王国的宰相(树的重心+贪心)

    [LOJ 6042]「雅礼集训 2017 Day7」跳蚤王国的宰相 description solution 一个到所有节点距离和最小的节点 ⇔\Leftrightarrow⇔ 树的重心(满足最重的儿 ...

  9. #6029. 「雅礼集训 2017 Day1」市场(势能,区间除)

    #6029. 「雅礼集训 2017 Day1」市场 用线段树维护数列,区间上维护最大最小值,区间和还有标记,修改时,区间加直接做,而区间除时,递归到线段树上某一区间,如果这一操作等价于区间加(也就是最 ...

最新文章

  1. CNN网络优化加速开源代码汇总
  2. 年中盘点:2021年炙手可热的10家数据科学和机器学习初创公司
  3. Keras【Deep Learning With Python】手写数字识别
  4. rⅰd的意思_计量经济学练习题
  5. 无符号数和有符号数之间赋值和大小比较
  6. STM32工作笔记0022---STM32F1开发版 GPIO口工作原理
  7. poj 1035 Spell checker(hash)
  8. url编码解码的三种方式
  9. 纯福利文章、送5本Java核心技术(不定期送福利)
  10. 交通灯matlab程序,毕业论文设计(交通灯).doc
  11. 浪潮存储助力方特动漫为《熊出没-狂野大陆》动物角色披上“动感毛发”
  12. 跨站脚本攻击(XSS)及防范措施
  13. Wordpress 网站设计入门 把Wordpress放在一个独立子目录下
  14. 核心单词Word List 46
  15. 【视觉-单目三维重建-理论篇】单目视觉三维重建----论文调研1
  16. JS HTML5仿微信朋友圈特效
  17. 商家又一必争之地!支付宝小程序一周年,带来哪些机遇?
  18. 在Python中画炫酷的K线图
  19. Unity中的数学基础——弧度与角度
  20. 华科计算机博导刘云生论文,华科论文式要求.doc

热门文章

  1. Centos 安装Firefox
  2. 2016年linux认证考试,2016年Linux认证考试模拟练习及答案
  3. Python中获取两数相除的商和余数
  4. 3.4.1python-panda数据筛选
  5. 我的window10中没有Windows Subsystem for Linux
  6. 笨办法学Python 25
  7. Async 异步转同步
  8. 【多线程/线程池】项目中实际应用场景
  9. sprintf用法(很强大啊)
  10. 为什么需要api产品经理