qduoj 帅气的HYC的珍珠(前缀和+思维)

2024-02-18 05:48

本文主要是介绍qduoj 帅气的HYC的珍珠(前缀和+思维),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

帅气的HYC经常早晨去锻炼(多么好的习惯~。有一天,他看到一路上的露珠,心里便产生了一个问题:一路上假如有N棵草,每颗草上可能会有露珠,或者没有露珠。连续的露珠会和为一体(>=2),并变为珍珠。

比如第1棵草上有露珠,第2棵草也有露珠。那么就会形成一个珍珠。第1棵草上有露珠,第2棵草有露珠,第3棵也有露珠,那么也会形成一个珍珠。相反,如果第1颗草有露珠,第2棵草没有露珠,就不会形成珍珠。

现在给你HYC今天早晨一路上的看到的N棵草,以及上面的露珠情况,给你Q次询问,每次询问[L,R],你能快速的告诉HYC,这个区间能形成多少个珍珠吗?ACCEPTIT!

第1行一个整数T,表示有T组测试数据。(T<=15)
第2行一个整数N, 表示有N棵草。(1<=N<=1000)
第3行有N个整数0或者1,中间用空格隔开, 1代表第i课草有露珠,0代表第i棵草没有露珠。
第4行是一个整数Q, 代表查询的次数。(1<=Q<=100000)
下面第(4+Q)行每行两个整数L, R。 代表查询的区间[L, R];(1<=L<=R<=N)

对于每组查询输出一行。

  复制
1
4
1 1 0 1
3
1 2
2 3
1 4
1
0

1

思路:这个题目查询是和更新分开的,因此可以事先建立一个前缀和数组,sum[i] 表示除当前位置外之前的珍珠的个数,对于每个询问,找到左右就行了。

#include <cstdio>
#include <queue>
#include <map>
#include <vector>
#include <cmath>
#include <stack>
#include <climits>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;int sum[2000];
int a[2000];
int m,n;
int getSum(int i)  // 获得右端点的 sum
{if(a[i] == 0){return sum[i];}if(i-1>=1 && a[i-1] == 1)return sum[i]+1;return sum[i];
}int getSum_(int i)   // 获得左端点的sum 值
{if(a[i] == 0)  // 如果该点为0,那么sum【i】是准确的return sum[i];if(i+1<=n && a[i+1] == 1)        // 如果a[i] == a[i+1] == 1;当前珍珠归于右,return sum[i];if(i-1>=1 && a[i-1] == 1)  // 如果 a[i+1] == 0 a[i] == a[i-1] == 1 当前珍珠归左return sum[i]+1;return sum[i]; // 否则当前没珍珠。
}
int main()
{int t;scanf("%d",&t);while(t--){scanf("%d",&n);for(int i = 1; i <= n; i++)scanf("%d",&a[i]);int flag = 0;for(int i = 1; i <= n; i++){if(a[i] == 0){if(flag >= 2)sum[i] = sum[i-1] + 1;elsesum[i] = sum[i-1];flag = 0;}else if(flag == 0){flag = 1;sum[i] = sum[i-1];}else{flag++;sum[i] = sum[i-1];}}int q;scanf("%d",&q);for(int i = 0; i < q; i++){int l,r;scanf("%d%d",&l,&r);if(r-l == 0)  // 因为后面的判断多用到 a[i+1] a[i-1] 对于长度为1的先排除。{printf("0\n");continue;}int tmp = getSum(r) - getSum_(l);printf("%d\n",tmp);}}return 0;
}


这篇关于qduoj 帅气的HYC的珍珠(前缀和+思维)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/720228

相关文章

【LeetCode热题100】前缀和

这篇博客共记录了8道前缀和算法相关的题目,分别是:【模版】前缀和、【模版】二维前缀和、寻找数组的中心下标、除自身以外数组的乘积、和为K的子数组、和可被K整除的子数组、连续数组、矩阵区域和。 #include <iostream>#include <vector>using namespace std;int main() {//1. 读取数据int n = 0, q = 0;ci

颠覆你的开发模式:敏捷思维带来的无限可能

敏捷软件开发作为现代软件工程的重要方法论,强调快速响应变化和持续交付价值。通过灵活的开发模式和高效的团队协作,敏捷方法在应对动态变化和不确定性方面表现出色。本文将结合学习和分析,探讨系统变化对敏捷开发的影响、业务与技术的对齐以及敏捷方法如何在产品开发过程中处理持续变化和迭代。 系统变化对敏捷软件开发的影响 在敏捷软件开发中,系统变化的管理至关重要。系统变化可以是需求的改变、技术的升级、

前缀和 — 利用前缀信息解决子数组问题

【前缀和的核心思想是预先处理数组来快速计算任意子数组的和,基本上用于数组和序列问题。】 前缀和算法具体步骤 构造前缀和数组: 给定一个数组nums,其前缀和数组prex定义为prex[i]表示为数组nums从起始位置到第i个位置的元素累加和。构建前缀和公式: p r e x [ i ] = n u m s [ i ] ( i = = 0 ) p r e x [ i ] = p r e x

0906作业+思维导图梳理

一、作业: 1、创捷一个类似于qq登录的界面 1)源代码 #include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);//QPushbutton:登录、退出this->join = new QP

[机缘参悟-222] - 系统的重构源于被动的痛苦、源于主动的精进、源于进化与演进(软件系统、思维方式、亲密关系、企业系统、商业价值链、中国社会、全球)

目录 前言:系统的重构源于被动的痛苦、源于主动的精进、源于进化与演进 一、软件系统的重构 1、重构的定义与目的 2、重构的时机与方法 3、重构的注意事项 4、重构的案例分析 二、大脑思维的重构 1、大脑思维重构的定义 2、大脑思维重构的方法 3、大脑思维重构的挑战与前景 三、认知的重构 1、定义 2、目的 3、方法 四、实例 五、总结 四、婚姻家庭的重构 1、婚

每日一题~cf 970 div3 (A思维,B小模拟,C二分,D排列数建图成环,E 26个字母暴力+前缀和,F 逆元,G 数论gcd )

A 题意: 有 a 个1 ,b 个2.问是否能将这些数划分为两个数值相等的集合。 输出 YES 或者 NO —————— 问题等价于 将数组 分成两个数值相同的数组。所以sum 应该是偶数。也就是说 1 的个数是偶数。在i1的个数是偶数的情况下,将 2 分成两份,如果2 的个数是偶数,OK。如果是奇数那么需要1来补齐,如果1 的个数大于等于2那么可以补齐。(1 的个数是偶数,需要2个1来补齐,剩下

散户炒股票为什么进步慢,学习程序化交易思维

炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取股票实时数据和历史数据 Python炒股自动化(3):分析取回的实时数据和历史数据 Python炒股自动化(4):通过接口向交易所发送订单 Python炒股自动化(5):通过接口查询订单,查询账户资产 散户炒股的常见难题

数业智能心大陆告诉你如何培养孩子的批判性思维?

现今的教育体系自小学起便强调培养孩子的批判性思维,这种能力被视为在复杂世界中生存和发展的关键。在当今信息爆炸的时代,它能让我们在海量信息中辨别真伪、深入思考并做出明智决策。如今,如数业智能心大陆产出的AI 心理咨询平台的出现为培养孩子批判性思维提供了新可能,其通过互动引导孩子思考,助力孩子提升批判性思维能力。 什么是批判性思维呢? 批判性思维是一种思考方式,它能够使我们在接收信

【数据结构-二维前缀和】力扣1504. 统计全 1 子矩形

给你一个 m x n 的二进制矩阵 mat ,请你返回有多少个 子矩形 的元素全部都是 1 。 示例 1: 输入:mat = [[1,0,1],[1,1,0],[1,1,0]] 输出:13 解释: 有 6 个 1x1 的矩形。 有 2 个 1x2 的矩形。 有 3 个 2x1 的矩形。 有 1 个 2x2 的矩形。 有 1 个 3x1 的矩形。 矩形数目总共 = 6 + 2 + 3 + 1 +

华为OD机试 - 最优结果的a数组数量 - 贪心思维(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。 一、题目描述