题目链接:http://codeforces.com/problemset/problem/466/C

题目大意: 给你一个长度为n的序列,让你将其分为三个区间,每个区间的和相等,求分的方法有几种?

正好最近学了前缀和,这道题目恰巧是一个前缀和的题

首先我们进行判断该序列的总和是否可以整除3: 如果不可以那么输出0

随后我们先求后缀和,如果后缀和 sum/3 相等,那么我们就用标记数组标记。最后在对标记数组求后缀和(cnt[i] 代表i->n 之间可以为第三个区间左边界的个数)

我们再求前缀和,如果前缀和和 sum/3 相等,那么个数 res += cnt[i+2]

为什么是i+2?

因为我们要确保有三个区间,如果是i+1的话不能够确保有第三个区间

AC代码:

 1 #include <cstdio>
 2 #include <string>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <cstdbool>
 6 #include <string.h>
 7 #include <math.h>
 8
 9 using namespace std;
10
11 typedef long long LL;
12 const int maxn = 500005;
13 int a[maxn],cnt[maxn];
14
15 int main()
16 {
17     int n;
18     LL res = 0;
19     LL sum = 0;
20     cin >> n;
21     for (int i=1;i<=n;i++)
22     {
23         cin >> a[i];
24         sum += a[i];
25     }
26     if (sum % 3 != 0)
27     {
28         printf("0\n");
29     }
30     else
31     {
32         sum /= 3;
33         LL ss = 0;
34         for (int i=n;i>=1;i--)
35         {
36             ss += a[i];
37             if (ss == sum)
38                 cnt[i]++;
39         }
40         for (int i=n-1;i>=1;i--)
41         {
42             cnt[i] += cnt[i+1];
43         }
44         ss = 0;
45         for (int i=1;i<=n;i++)
46         {
47             ss += a[i];
48             if (ss == sum)
49                 res += (LL)cnt[i+2];
50         }
51         cout << res << endl;
52     }
53     return 0;
54 }

转载于:https://www.cnblogs.com/-Ackerman/p/11165194.html

C. Number of Ways(前缀和)相关推荐

  1. 利用 Powerful Number 求数论函数前缀和

    利用 Powerful Number 求数论函数前缀和 0. 前言 Powerful Number 可以用来快速求解数论函数的前缀和. 本文参考了: zzq's blog 攀岩高手 的博客 在此向以上 ...

  2. LeetCode每日一题(1444. Number of Ways of Cutting a Pizza)

    Given a rectangular pizza represented as a rows x cols matrix containing the following characters: ' ...

  3. CodeForces - 466C Number of Ways(推公式/dp)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列,现在要求出满足条件的 ( i , j ) 的匹配数量,满足: 题目分析:训练时推的公式,简单说一下吧,维护前缀和 sum,则确定两个断点 ( ...

  4. Codeforces - 466C - Number of Ways - 组合数学

    https://codeforces.com/problemset/problem/466/C 要把数据分为均等的非空的三组,那么每次确定第二个分割点的时候把(除此之外的)第一个分割点的数目加上就可以 ...

  5. leetcode面试准备:Decode Ways

    1 题目 A message containing letters from A-Z is being encoded to numbers using the following mapping: ...

  6. Decode Ways leetcode java

    题目: A message containing letters from A-Z is being encoded to numbers using the following mapping: ' ...

  7. LeetCode91 Decode Ways

    题目: A message containing letters from A-Z is being encoded to numbers using the following mapping: ' ...

  8. LeetCode447. Number of Boomerangs

    Description Given n points in the plane that are all pairwise distinct, a "boomerang" is a ...

  9. 【leetcode】91. Decode Ways A-Z的字母表示1-26的数字,反向破解多少种字符串的可能性...

    1. 题目 A message containing letters from A-Z is being encoded to numbers using the following mapping: ...

最新文章

  1. Spark的RDD序列化
  2. Python代码:数字图像处理(DIP)7.1.1图像金字塔example7.1
  3. excel函数去重_将数字去重,然后按从小到大的顺序连接起来!
  4. MessagePack 学习笔记
  5. mysql 常用小工具包_mssql+mysql小工具(无需环境依赖)-mysql数据库批量实体CS类导出工具下载v3.0免费版-西西软件下载...
  6. C#中释放数据库连接资源
  7. Java PreparedStatement IN子句替代
  8. selenium+ocr 破解验证码
  9. 入门SpringBoot集成常用框架以及常见处理方式(括宽知识面)
  10. 用 Python 分析某医院药品销售案例
  11. iOS IOS开发中各种型号的分辨率总结
  12. MainMenu中控制点击效果
  13. vim之快速查找功能
  14. 如何查找重复文件并快速删除,电脑查重复文件的方法
  15. RTL设计与编码指导
  16. Ubuntu(护眼设置)安装屏幕色温调节软件F.lux
  17. c语言画一只小猪佩奇
  18. NX安装cuda和cudnn
  19. 柠檬被虐待了 · 404设计#1
  20. 大数据流式处理框架Flink介绍

热门文章

  1. c语言中栈区运用原理形象图,C语言实现使用动态数组来构造栈结构
  2. linux搜索有哪些文件夹,Linux常见几个查找命令
  3. 爬虫requests如何提取图片_如何提取图片上的文字(办公技巧)
  4. 每天一个linux命令(15):tail 命令
  5. 你连原理都还没弄明白?java的基本单位
  6. 【机器学习入门到精通系列】插值与拟合
  7. python【数据结构与算法】循环赛日程表(分治)
  8. 【django轻量级框架】在线视频教育系统设计与实现
  9. java 填充pdf_Java如何创建和填充PDF表单域(代码示例)
  10. 计网链路层mac地址和ip地址缺一不可