BZOJ 4236 "JOIOJI"(前缀和+map+pair)】的更多相关文章

传送门: [1]:BZOJ [2]:洛谷 •题解 定义数组 a,b,c 分别表示 'J' , 'O' , 'I' 的前缀和: 要想使区间 (L,R] 满足条件当且仅当 a[R]-a[L] = b[R]-b[L] = c[R]-c[L]; 那么,由 a[R]-a[L] = b[R]-b[L] ⇔ a[R]-b[R] = a[L]-b[L]; 同理,由 b[R]-b[L] = c[R]-c[L] ⇔ b[R]-c[R] = b[L]-c[L]; 提前预处理出 a,b,c 数组后: 对于 i 位置,查…
设sj,so,si分别是J O I的个数前缀和,然后要求求最长(l,r)满足sj[r]-sj[l-1]==so[r]-so[l-1]==si[r]-si[l-1],化简一下就是满足so[r]-so[l-1]-(sj[r]-sj[l-1)-(si[r]-si[l-1]-(so[r]-so[l-1))==0,把这个搞成一个pair用map记录最早出现位置然后更新ans即可 注意因为是前缀和相减,所以0位置也要加进map #include<iostream> #include<cstdio&g…
4236: JOIOJI Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=4236 Description JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJI桑想让自己孩子的名字和自己一样由“J.O.I”三个字母构成,并且想让“J.O.I”三个字母的出现次数恰好相同.…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4236 [题目大意] 给出一个只包含三种字母的字符串,求出三种字母数量相等的最长子串 [题解] 我们记录三个字母的前缀和,我们发现只要一个区段左右端点前缀和之差相等, 就说明这个区段三个字母出现次数相等,其充要条件为SJ-SO和SO-SI相等, 所以我们在map中保存双关键字第一次出现的位置,每次查询当前位置和第一次出现位置的距离 求最大值即可. [代码] #include <cstd…
分别记录J,O,I,的个数 cnt[char][i] 表示处理到第i位,char的个数 显然当且仅当 cnt[J][i] - cnt[O][i] == cnt[J][j-1] - cnt[O][j-1]  &&  cnt[O][i] - cnt[I][i] == cnt[O][j-1] - cnt[I][j-1] 时 i到j位是一个长为i-j+1的合法串 于是把状态压到一个 long long 里 map瞎搞就行 没去掉调试输出导致WA了四次QAQ #include<cstdio&g…
Description 给出一个字符串,只包含3个字母,询问最长的一个子串,3个字母出现次数相同. Sol map. 如果一个子串满足条件,那么它端点处的三个字母的个数两两差值都是一样的,直接存个状态强行上map. 注意要加入一个初始状态. Code #include<cstdio> #include<map> #include<iostream> using namespace std; const int N = 200005; struct S{ int a[3]…
BZOJ 4236 JOIOJI f[i][0..2]表示前i个字符中′J′/′O′/′I′的个数 将二元组<f[i][0]−f[i][1],f[i][1]−f[i][2]>扔进map,记录一下最早出现的时间 对于每一个位置去map里面查一下就可以 时间复杂度O(nlogn) #include <map> #include <cstdio> #include <cstring> #include <iostream> #include <a…
D. Kostya the Sculptor time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Kostya is a genial sculptor, he has an idea: to carve a marble sculpture in the shape of a sphere. Kostya has a frien…
Fibonacci-ish Yash has recently learnt about the Fibonacci sequence and is very excited about it. He calls a sequence Fibonacci-ish if the sequence consists of at least two elements f0 and f1 are arbitrary fn + 2 = fn + 1 + fn for all n ≥ 0. You are…
[传送门]https://nanti.jisuanke.com/t/31458 [题目大意]有N个帧,每帧有K个动作特征,每个特征用一个向量表示(x,y).两个特征相同当且仅当他们在不同的帧中出现且向量的两个分量分别相等.求最多连续相同特征的个数? [题解]用一个map来维护帧中特征的信息,map中的键即读入的向量,因此用一个pair<int , int>表示,键的值也是一个pair,需要记录它当前已经连续了多少次,还需要记录它上一次出现的帧的位置.如果它上一帧没有出现过,那么它的连续次数就要…