hihocoder第233周
题目链接
题目描述
给定一个数组a[N],N小于1e5。把数组划分成若干个片段,每个片段的和都不为0,问有多少种划分方法?
方法描述
定义f(i)表示0~i共有多少种划分方式,则$f(j)=\sum_{i\in[0,j) and sum(a[i+1:j]) \ne 0} f(i)$
相当于统计$f(j)=\sum_{i \in [0,j)} f(i)-\sum_{i \in [0,j) and sum(a[i+1:j])==0} f(i)$。对于此式第二项可以使用map记录下来,满足sum(a[i+1:j])的那些i,必定满足prefix[i]==prefix[j],prefix[i]表示前缀和,即0~i之间全部元素之和。
#include<iostream>
#include<stdio.h>
#include<map>
using namespace std;
typedef long long ll;
const int maxn = 1e9 + 7;
const int maxcount = 1e5 + 3;
const int maxvalue = 103;
int n;
int a[maxcount];
int pre[maxcount];
map<int, int>ma;
int main() {freopen("in.txt", "r", stdin);cin >> n;for (int i = 0; i < n; i++)scanf("%d", a + i+1); pre[0]=a[0] = 0;ma[0] = 1;for (int i = 1; i <= n; i++)pre[i] = pre[i - 1] + a[i]; ll s = 1;ll now = 0;for (int i=1; i <= n; i++) { now = (s- ma[pre[i]]+maxn)%maxn; s = (s + now) % maxn; if (ma.count(pre[i]) == 0)ma[pre[i]] = 0;ma[pre[i]] = (ma[pre[i]]+now)%maxn;} cout << now<< endl;return 0;
}
转载于:https://www.cnblogs.com/weiyinfu/p/10125574.html
hihocoder第233周相关推荐
- hihoCoder 第136周 优化延迟(二分答案+手写堆)
题目1 : 优化延迟 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho编写了一个处理数据包的程序.程序的输入是一个包含N个数据包的序列.每个数据包根据其重要程度不同 ...
- hihocoder第220周-一道拧巴的题
一.220周 题目链接 问题描述 键盘上有N个数字按键,每个按键只能按一次,每次可以按下多个键,请输出所有可能的按键情况. 输入一个整数N(N在1~8之间),输出全部的按键可能.例如:输入3,输出为 ...
- hihocoder 第113周 Fibonacci(动态规划)
题目大意:给定一个数字序列,求该序列的所有子序列中有多少是斐波拉契数列的前缀,即满足"1 1 2 3 ..."的形式. 解题思路:首先注意ai的范围,首先可以肯定斐波拉切数列不会太 ...
- hihocoder第238周:杨氏矩阵的个数
题目链接 问题描述 给定一个N行M列的矩阵,往里面填入$1-N\times M$个数字,使得这个矩阵每行.每列都满足递增.问:有多少种填法? 问题分析 这个问题很难,如果能够直接想到,那就是天才了. ...
- hihocoder第237周:三等分带权树
题目链接 问题描述 给定一棵树,树中每个结点权值为[-100,100]之间的整数.树中包含结点总数不超过1e5.任选两个非根节点A.B,将这两个结点与其父节点断开,可以得到三棵子树.现要求三棵子树的权 ...
- hihocoder第229周:最大连续字母个数
题目链接 给定一个仅包含小写字母的字符串s(长度小于1e5),你可以交换任意两个字符的位置,现在允许交换k次,要求交换之后,s中最长的连续相同字符个数尽量多,求这个最长连续区间的长度. 样例 输入 1 ...
- hihocoder第226周:打表找规律
题目列表 问题描述 有一个文本框,可以执行以下操作: 输入A Ctrl+C 复制 Ctrl+V 粘贴 Ctrl+A 全选 N次操作最多能够造出多少个A来? 输入一个N,输出一个整数,表示最多有多少个A ...
- hihocoder第218周:AC自动机
题目链接 问题描述 给定n个单词,给定一个长字符串s,单词总长度和字符串s的长度都不超过1e5.要求把s中所有的出现单词的位置用*替代. 例如: 样例输入 2 abc cd abcxyzabcd 样例 ...
- hihocoder第212周-动态规划
题目链接 import java.util.Scanner;public class Main { long mod = (long) (1e9 + 7); int MAXN = 107; int a ...
最新文章
- SVN删除文件及其恢复问题详解
- 【C++】38.类成员变量声明为 对象与指针的区别
- 《Effective C++》读书笔记(第二部分)
- git小乌龟一次性设置密码
- web 应用开发最佳实践之一:避免大型、复杂的布局和布局抖动
- java sqlmap_sqlmap 学习指南
- Codeforces 235C
- c# 定位内存快速增长_改善C#程序,提高程序运行效率的50种方法
- g++链接boost库
- 中国象棋口诀及要领精髓
- vue ---- 组件综合案例(购物车案例)
- cocos2d笔记 (4)cocos2d里的各种动作
- keepalived 单播模式
- 服务器能不能用普通硬盘,服务器硬盘与普通硬盘之间的区别
- word两种html区别,word文本框有哪两种方式?
- 拼图游戏怎样切换代码html,HTML5技术之图像处理:一个滑动的拼图游戏-H5教程
- Gmail:如何撤回发出的邮件?
- Eagle电路板绘制
- 模式识别类毕业论文文献都有哪些?
- 常用软件分享及下载地址