Codeforces 909 C. Python Indentation (DP+树状数组优化)
题目链接:Python Indentation
题意:
Python是没有大括号来标明语句块的,而是用严格的缩进来体现。现在有一种简化版的Python,只有两种语句:
(1)'s'语句:Simple statements. 相当于一般语句。(2)'f'语句:For statements. 相当于for循环,并且规定它的循环体不能为空。
然后给你一段没有缩进的Python程序,共n行(n <= 5000)。问你添加缩进后,有多少种合法且不同的Python程序。
题解:题目解析
DP过去,如果第i个位置是'f'的话,dp[i][j]只加到dp[i+1][j+1]上,如果是‘s’则可以加到从dp[i][0,j]的所有数上。区间假发可以用树状数组优化,把复杂度降到(n×n×log(n))。这道题让我发现long long操作要比int慢一倍左右,还有MOD操作是真滴慢,遇到MOD操作可以用if降低时间。
#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 5e3+;
const int MOD = 1e9+;
char vec[MAX_N];
int dp[MAX_N][MAX_N];
void add(int pos,int x,int num)
{
if(num<) num+=MOD;
for(;x<MAX_N;x+=(x&-x))
{
dp[pos][x]=dp[pos][x]+num;
if(dp[pos][x]>=MOD) dp[pos][x]-=MOD;
}
}
int sum(int pos,int x)
{
int ans = ;
for(;x>;x-=(x&-x))
{
ans=ans+dp[pos][x];
if(ans>=MOD) ans-=MOD;
}
return ans;
}
int main()
{
int N,M,T;
while(cin>>N)
{
memset(dp,,sizeof(dp));
for(int i=;i<=N;i++)
{
cin>>vec[i];
}
dp[][] = ;
for(int i=;i<=N;i++)
{
for(int j=;j<=i;j++)
{
int t = sum(i,j);
if(vec[i] == 'f')
{
add(i+,j+,t);
add(i+,j+,-t);
}
else
{
add(i+,,t);
add(i+,j+,-t);
}
}
}
int ans = ;
for(int i=;i<=N;i++)
{
ans = ans+sum(N,i);
if(ans>=MOD) ans-=MOD;
}
cout<<(ans+MOD)%MOD<<endl;
}
return ;
}
Codeforces 909 C. Python Indentation (DP+树状数组优化)的更多相关文章
- Codeforces 909C Python Indentation:树状数组优化dp
题目链接:http://codeforces.com/contest/909/problem/C 题意: Python是没有大括号来标明语句块的,而是用严格的缩进来体现. 现在有一种简化版的Pytho ...
- Codeforces 946G Almost Increasing Array (树状数组优化DP)
题目链接 Educational Codeforces Round 39 Problem G 题意 给定一个序列,求把他变成Almost Increasing Array需要改变的最小元素个数. ...
- 2015南阳CCPC C - The Battle of Chibi DP树状数组优化
C - The Battle of Chibi Description Cao Cao made up a big army and was going to invade the whole Sou ...
- 【eJOI2020】考试(dp & 树状数组优化)
Description \(n\) 个正整数排成一列,每个位置 \(i\) 有一个初始值 \(A_i\) 以及目标值 \(B_i\). 一次操作可以选定一个区间 \([l, r]\),并将区间内所有数 ...
- Codeforces 1085G(1086E) Beautiful Matrix $dp$+树状数组
题意 定义一个\(n*n\)的矩阵是\(beautiful\)的,需要满足以下三个条件: 1.每一行是一个排列. 2.上下相邻的两个元素的值不同. 再定义两个矩阵的字典序大的矩阵大(从左往右从上到下一 ...
- bzoj 3594: [Scoi2014]方伯伯的玉米田 dp树状数组优化
3594: [Scoi2014]方伯伯的玉米田 Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 314 Solved: 132[Submit][Sta ...
- FZU2236 第十四个目标 dp+树状数组优化
分析:这种题烂大街,n^2,然后数据结构优化下到nlogn,离散化 #include <cstdio> #include <cstring> #include <queu ...
- CodeForces - 597C Subsequences 【DP + 树状数组】
题目链接 http://codeforces.com/problemset/problem/597/C 题意 给出一个n 一个 k 求 n 个数中 长度为k的上升子序列 有多少个 思路 刚开始就是想用 ...
- CodeForces - 314C Sereja and Subsequences (树状数组+dp)
Sereja has a sequence that consists of n positive integers, a1, a2, ..., an. First Sereja took a pie ...
随机推荐
- windows:nginx配置http、https反向代理
一.下载 Windows 版本的 nginx nnginx下载:http://nginx.org/en/download.html 推荐稳定版本.下载完成后,解压得到 nginx-1.14.0 ,我把 ...
- ZT Shell 排序
Shell 排序 分类: 算法 C 2008-09-17 11:02 1898人阅读 评论(4) 收藏 举报 shell语言c 刚才在CSDN的C语言板块看到了有人说Shell排序的问题,所以一起学习 ...
- SQLServer------查询结果为空的列赋默认值
ISNULL(字段,默认值) 如:SELECT ISNULL(name,'无名') FROM [User]
- php操作redis的两个个小脚本
redis这东西,查询起来没有mysql那么方便,只能自己写脚本了.下面是工作中写的两个小脚本 第一个脚本,查找有lottery|的键,将他们全部删除|打印出来 <?php $redis = n ...
- ORACLE默认实例设置--linux
数据库实例多了之后,每次export的时候,显示的ORACLE_SID总不是自己经常用的那个,要是能让默认的自定义就好了. 现在就解释一下在linux环境中如何定义: 1.su - oracle 2. ...
- 1251. 序列终结者【平衡树-splay】
Description 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这 ...
- 10、Android--技巧
10.1.全局获取Context的技巧 在实践中有很多的地方都可以使用到Context 弹出Toast的时候需要,启动活动的时候需要.发送广播的时候需要. 操作数据库的时候需要.使用通知的时候需要.. ...
- js检测是够断网
方法 一 navigator.onLine 这个html5的 navigator的新特性可以很简单帮我们搞定 HTML5为此定义了一个navigator.onLine属性,这个属性值为true表示 ...
- 关于SpringApplication包无法导入报错问题
问题描述:一直再报红线,包始终无法导入,参考过好几个博友分享的解决方案,依然没有效果,对了补充一点SprinBoot版本为2.0.3. 问题解决:目前通过更换版本得到解决1.5.6或者1.5.8都可以 ...
- P1796 汤姆斯的天堂梦
题目描述 汤姆斯生活在一个等级为0的星球上.那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍.他向往着等级为N的星球上天堂般的生活. 有一些航班将人从低等级的星球送上高一级的星球,有时需 ...