首页 > 其他分享 >P10233 [yLCPC2024] A. dx 分计算 题解

P10233 [yLCPC2024] A. dx 分计算 题解

时间:2024-10-20 19:34:21浏览次数:1  
标签:10 P10233 前缀 int 题解 sum leq yLCPC2024 询问

题目大意:

题目传送门

共 \(T\) 组测试数据,每组数据给定一个字符串 \(s\) 和 \(Q\) 次询问,按照特定的赋值方式,每次询问 \(l\) 到 \(r\) 间按这样的赋值方式的总和是多少。

赋值方式如下:

  • P 可得3分
  • p 可得2分
  • G 可得1分
  • 其余字符不得分

题目分析:

前置知识:前缀和。(没有学过的可以先完成这题再回来做本题)

考虑数据范围,\(1 \leq \sum{|s|} \leq 10^7,1 \leq \sum{Q} \leq 10^4,1 \leq l \leq r \leq |s|\),发现 \(\sum{|s|}\) 可高达 \(10^7\),暴力的总时间复杂度为 \(O(T \times |s| \times {Q})\),故暴力求和不可,考虑优化。

由题意发现没有强制性在线询问,故可以考虑离线询问。用前缀和提前计算出前 \(i\) 个数的总和,每次询问 \(l\) 到 \(r\),记答案为 \(ans\),前缀和数组为 \(sum\),则:

\[ans \gets sum_r - sum_{l-1} \]

故时间复杂度为 \(O(\sum |s|+\sum Q)\)。

code:

#include<bits/stdc++.h>
using namespace std;
const int N=1e7+5;
int T,sum[N],Q,len;
string s;
signed main()
{
	scanf("%d",&T);
	while(T--)
	{
		cin>>s;
		scanf("%d",&Q);
		len=s.size();
		//for(int i=1;i<=len;i++) sum[i]=0; 
		//这里因为前缀和的计算会直接覆盖上次的值故可以不用清零 
		for(int i=1;i<=len;i++)
		{
			//前缀和依题意赋值 
			sum[i]=sum[i-1];
			if(s[i-1]=='P') sum[i]+=3;
			if(s[i-1]=='p') sum[i]+=2;
			if(s[i-1]=='G') sum[i]++;
		}
		while(Q--)
		{
			int x,y;
			scanf("%d%d",&x,&y);
			printf("%d\n",sum[y]-sum[x-1]);//询问 O(1) 求出答案 
		}
	}
	return 0;
}

标签:10,P10233,前缀,int,题解,sum,leq,yLCPC2024,询问
From: https://www.cnblogs.com/lunjiahao/p/18487696

相关文章

  • 题解:AT_abc376_c [ABC376C] Prepare Another Box
    很好的一道二分答案题。听说CSP考前写tj可以让rp+=inf?注:下文中\(w\)指物品重量序列,\(x\)指箱子容量序列。先问个问题:为什么我上来就敢肯定这是个二分答案题?或者说,单调性在哪儿?非常简单:如果一个盒子的容量越大,能装下的东西就更多(废话)。那么如果\(v\)不够用,可以扩......
  • 【学校训练记录】10月个人训练赛4个人题解
    A:要使s,t相等只要互相删除对方没有的字母即可,即找到a-z字母拥有最少的#include<bits/stdc++.h>#defineendl"\n"#defineintlonglongusingnamespacestd;strings1,s2;inta1[30],a2[30];voidsolve(){ cin>>s1>>s2; for(inti=0;i<s1.size(......
  • 【洛谷 P1116】车厢重组 题解(模拟+冒泡排序)
    车厢重组题目描述在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他......
  • 【洛谷 P1116】车厢重组 题解(模拟+冒泡排序)
    车厢重组题目描述在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他......
  • CF1187E 题解
    Titletranslation给定一棵\(n\)个点的树,初始全是白点。要做\(n\)步操作,每一次选定一个与一个黑点相隔一条边的白点,将它染成黑点,然后获得该白点被染色前所在的白色联通块大小的权值。第一次操作可以任意选点,求可获得的最大权值。Solution如何让这道题秒降绿题呢?先简化一......
  • 题解:AT_abc376_c [ABC376C] Prepare Another Box
    这道题要求把\(a\)数组和\(b\)数组一一匹配,且要求无法匹配的数量最多为一,并且这个无法匹配的元素最小。可以注意到我们把两个数组排序以后一一对应以后如果出现一个无法匹配的元素,那么这一定就是答案。但是如果我们从小到大枚举,会发现最后剩下的元素不一定最小,所以我们选择......
  • 【题解】「COCI 2018」Teoretičar
    LinkofThisProblem根据Vizing定理,最小的答案就是二分图的最大度数。同时可以在\(O(nm)\)的时间复杂度内构造出一组解。显然对于这道题我们需要更高效的做法。注意到\(2\)的整数次幂,考虑分治。既然答案跟最大度数有关,如果我们每次能把边集分为两个集合,认为她们的颜色......
  • ICPC 2021–2022,NERC – 北欧欧亚总决赛题解翻译
    原文链接ICPC2021–2022,NERC–北欧欧亚总决赛题解翻译圣彼得堡,阿拉木图,巴尔瑙尔,明斯克,埃里温,2022年4月13日问题A.可接受的地图(AdmissibleMap)问题作者和开发者:IlyaZban我们称形如“RLRL...RL”的任何字符串为平凡字符串。引理任何非平凡字符串最多只能有一个构成......
  • [ABC376E] Max × Sum 题解
    [ABC376E]Max×Sum题解原题链接洛谷链接一道简单的推性质题,首先明确一个性质,子集是非连续的,所以在计算时并不用连续区间求。拿过题来,首先想的是枚举\(B\)的最小子集,但其复杂度为\(O(C_N^K)\)复杂度过高,不足以通过本题。于是转变思路,枚举\(A\)之中的最大值。若\(a_i......
  • 整数去重-题解
    整数去重-题解题目描述给定含有n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。输入格式输入包含两行:第一行包含一个正整数n(1<=n<=20000),表示第二行序列中数字的个数;第二行包含n个整数,整数......