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 ...
随机推荐
- cocos lua 加密方案
cocos2d使用的是luajit,lua原生编译出来的bytecode和luajit是不兼容的,所以直接用luac法编译出来的bytecode脚本无法在cocos2d中使用. 目前所指的解决方案有2 ...
- flask模块
import flask, json #把当前的文件当成一个服务 server = flask.Flask(__name__) @server.route('/index', methods=['ge ...
- 83、android的消息处理机制(图+源码分析)——Looper,Handler,Message
转载:http://www.cnblogs.com/codingmyworld/archive/2011/09/12/2174255.html https://my.oschina.net/u/139 ...
- python练习题-3
author:headsen chen date: 2018-06-01 15:51:05 习题 31: 作出决定(if + raw_input) [root@localhost py]# cat ...
- 【BZOJ4071】[Apio2015]巴邻旁之桥 Treap
[BZOJ4071][Apio2015]巴邻旁之桥 Description 一条东西走向的穆西河将巴邻旁市一分为二,分割成了区域 A 和区域 B. 每一块区域沿着河岸都建了恰好 1000000001 ...
- js 空正则匹配任意一个位置
看一个正则 这里明显,起到匹配作用的是 | 后的,可 | 后什么都没有,原理不知道,也没有搜到文献,只有在 Reg101 上是这样解释的, 所以得出结论: js 中,空正则匹配任意一个位置. 不过,这 ...
- 170417、Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
前言:互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服 ...
- 160317(二)、按sort排序,sort为空的在后面
按sort排序,sort为空的在后面 select * from 表名 order by (case when sort is null or sort='' then 1 else 0 end),s ...
- Python--进阶处理3
# ===================第三章:数字日期和时间==================== # ---------------------数字的四舍五入----------------- ...
- KDevelop使用笔记【中文教程】
*师从官方文档: https://userbase.kde.org/KDevelop4/Manual/zh-cn https://docs.kde.org/trunk5/en/extragear-kd ...