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 ...
随机推荐
- Script:when transaction will finish rollback
------------------------------------------------------------------------------- -- -- Script: rollin ...
- word 排版用到双直线、波浪线、虚线 、直线、隔行线等技巧
在办公或毕业设计时,有时排版需要插入双直线.波浪线.虚线 .直线.隔行线等而烦恼, 今天小白与大家分享技巧如下: 感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮.本文欢迎各位转载,但 ...
- 关于WSL(Windows上的Linux子系统)的简单介绍及安装
WSL,Windows Subsystem for Linux,就是之前的Bash on [Ubuntu on] Windows(嗯,微软改名部KPI++),在wsl环境下我们可以运行一些Linux程 ...
- linux中ftp提示--553 Could not create file
今天在阿里云的linux上搭建ftp服务的时候,搭建成功之后,上传文件时总提示553 Could not create file,找了半天原因,终于解决了 ftp主目录为/home/myftp /ho ...
- 铁乐学Python_Day35_Socket模块3和hmac模块
验证客户端链接的合法性 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂, 那么可以利用hmac+加盐的方式来实现. 例1:简单的服务端如下 #!/usr/bin/env ...
- RedHat 7 安装PostgreSQL 10.5
系统环境 Redhat: Version: 7.4.1708 Architecture: x86_64 Address: 10.127.1.11 User: root Uassword: redhat ...
- 我的第一个springboot应用+maven依赖管理
第一步:使用Eclipse创建maven工程SpringBootFirst:工程目录如下 第二步:编写依赖文件pom.xml <project xmlns="http://maven. ...
- fountion 的调用 和 打印返回值 + 占位符
结果: (2) 结果
- DevExpress01、独立使用的控件
XtraEditors 库提供了只能独立使用的控件,也就是说不能在容器控件的内置编辑中使用它们. 这些控件包括: 几种类型的列表框.数据导航控件.滚动条和一个按钮控件. 这些控件都是 BaseStyl ...
- C++11 的右值引用
作者:Tinro链接:https://www.zhihu.com/question/22111546/answer/30801982来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...