SDUT OJ 2607
/*http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2607*/
题目大意:给出一个字符串,求出里面为山字形的子序列,比如1 ,给出的字符串都是
小写字母组成,大小按照码值判断,问里面有几个这样的子序列,保证长度大于等三,且中点左右必须至少有一个字符。注意:相同的两个算两个
比如acca算aca和aca两个,其中c的下标分别为1和2。
解法:既然是左边递增右边递减,那么我们左右都求一次递增子序列的个数,然后相乘就是相加就是所有的组合数
因为字母只有26个,那么时间复杂度为O(*n);
建立一个hash字母表记录到小标i为止前面出现过的以每个字母结尾的递增子序列个数,单个不算
比如:abca,到小标2时枚举hash表的0到1,以前求出的hash[]=,hash[]为2,那么hash[]=,虽然单个的不算,但是每次算完dp[i]
的值要加上s[i]这一个单词以保证后面的字母加上s[i]可以得到一个长度大于等于2的子序列
,然后逆着再做一遍,就可算出正着的和逆序的以每个字母结尾的长度在二和二以上的 #include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[];
char s[];
int hash[];
int main()
{
int i,j,n,c;
long long sum,ok;
while(scanf("%d",&n)!=EOF)
{
scanf("%s",s);
memset(hash,,sizeof(hash));
for(i=;i<n;i++)
{
dp[i]=;
c=s[i]-'a';
for(j=;j<c;j++)
{
dp[i]+=hash[j];
dp[i]=dp[i]%;
}
hash[c]+=dp[i]+;//加1,相当于加上s[i]这个字母
hash[c]=hash[c]%;
}
memset(hash,,sizeof(hash));
sum=;
for(i=n-;i>=;i--)
{
c=s[i]-'a';
ok=;
for(j=;j<c;j++)
{
ok+=hash[j];
ok=ok%;
}
hash[c]+=ok+;
hash[c]=hash[c]%;
sum=sum+(dp[i]*ok);
sum=sum%;
}
printf("%lld\n",sum);
}
return ;
} /**************************************
Problem id : SDUT OJ 2607
User name : ORC
Result : Accepted
Take Memory : 756K
Take Time : 150MS
Submit Time : 2013-08-14 14:45:07
**************************************/
SDUT OJ 2607的更多相关文章
- SDUT OJ 1221 亲和数 (找出某个数n所有的因子数,只需要暴力:2->sqrt(n) 即可 )
亲和数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 如果a的因子和等于b,b的因子和等于a,且a≠b,则称a,b为亲和数对. ...
- SDUT OJ 图练习-BFS-从起点到目标点的最短步数 (vector二维数组模拟邻接表+bfs , *【模板】 )
图练习-BFS-从起点到目标点的最短步数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天 ...
- 【离散数学】 SDUT OJ 传递闭包 && memset 使用注意事项
传递闭包 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 已知有n头牛,m次战斗关系, ...
- SDUT OJ 2783 小P寻宝记
#include<iostream> #include<memory.h> #define N 10020 using namespace std; int dp[N],pi[ ...
- SDUT oj 3005 打怪升级(内存搜索)
当比赛一直纠缠骑2如何做一个非常大的数量,数组不开啊...后来他们发现自己很傻啊,该数不超过最大10什么,这个上限就是力量100什么.. .. 其它的就是记忆化搜索啊,还有就是加一点力量的瓶子当时就要 ...
- SDUT OJ 2463 学校password你必须学会科学计划
#include<iostream> #include<string.h> #include<stdio.h> #define N 10010 #define M ...
- SDUT oj 2610
/*题目大意:输入一序列n个数字,然后输入m个询问,每个询问包含左边区间和右边区间,还有a和b,问你这个区间内有几个数大于等于a且小于等于b 做法:树状数组,先求出这个区间内有几个数小于a,然后求这个 ...
- SDUT OJ 效率至上(线段树)
效率至上 Time Limit: 5000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 题意很简单,给出一个数目为n ...
- SDUT OJ 数组计算机(线段树)
学长推荐了这个博客详细的介绍了线段树的建立.查找.更新: 数组计算机 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Prob ...
随机推荐
- Android之布局属性归纳
第一类:属性值为true或falseandroid:layout_centerHrizontal 水平居中android:layout_centerVertical 垂直居中android:layou ...
- js小功能实现
发送随机数手机验证码60秒倒计时 mm.mobileCheck = function(t){ var mobile = $("#user_mobile").val(); if(&q ...
- 【SharePoint 2010】SharePoint 2010开发方面的课堂中整理有关问题
SharePoint 2010开发方面的课堂中整理有关问题陈希章 ares@xizhang.com1. 对于SharePoint的体系结构不甚清楚,觉得有点乱了解了就不会觉得乱了,请理解1) 场服务 ...
- java模块开发关键步骤
1. 创建数据表 a) 确定表名(如:role) b) 确定表中的业务列(如:role_name.role_desc) c) 添加其它基本列 i. 如:role_id(主键).status(数据状态, ...
- 演示一个简单的Redis队列
0.Windows Service版下载 https://github.com/rgl/redis/downloads 1.新建一个Console项目 打开Nuget控制台,执行以下命令 Instal ...
- 【Python Programe】WSGI (Web Server Gateway Interface)
Part1: What is a Web server? 一个位于物理服务器上的网络服务器(服务器里的服务器),等待客户端去发送request,当服务器接收到request,就会生成一个respons ...
- HDFS基本工作机制
- excel判断单元格包含指定内容的函数用=IF(COUNTIF(A1,"*内容*"),"0","1")
前面我们聊过怎样将Excel包含某字符的单元格填充颜色,这边我们用另外一种方法来实现:excel判断单元格包含指定内容的函数 选中需要显示结果的单元格,假设我们要判断第一行第一列的单元格A1是否含有“ ...
- 003-SpringBoot导入xml配置
SpringBoot理念就是零配置编程,但是如果绝对需要使用XML的配置,我们建议您仍旧从一个@Configuration类开始,你可以使用@ImportResouce注解加载XML配置文件,我拿一个 ...
- 007-mac快捷键
锁屏:Ctrl + Command + Q touch-bar:方法:“系统偏好设置”>“键盘”>“自定Control Strip…”,将“锁定屏幕”图标拖拽到Touch Bar上即可.] ...