D - RGB Triplets(前缀和+思维)
题意很好懂,就是一个长度为n的序列,s[i] 只可能是r,g,b,要你要满足就 j - i != k - j,并且s[i],s[j],s[k]两两不相同,并且i < j < k,的个数有多少个。
思路:
暴力O(n^3)模拟一遍铁超时,j - i != k - j 一开始一直在观察这个式子看能不能优化一下,事实上可以不管这个式子就一个区间[i,k]={B,R},那么我们在[i + 1,k - 1]这个区间找有多少个G就行了,需要考虑一下中点是否需要减掉,然后把所有的情况枚举出来就行了。这里用前缀和维护sum [ i ] [ 1 - 3 ]:表示从1到i有多少个R,B,G。
感觉写的有点点复杂了。。。。
代码:
#include<bits/stdc++.h>
using namespace std;const int maxn = 1e5 + 10;
typedef long long int ll;
ll sum[maxn][4];
void solved(){ll n;cin>>n;char s[5000];scanf("%s",s + 1);ll r = 0, b = 0,g = 0;for(int i = 1; i <= n; i++){if(s[i] == 'R'){r++;sum[i][1] = sum[i - 1][1] + 1;sum[i][2] = sum[i - 1][2];sum[i][3] = sum[i - 1][3];}else if(s[i] == 'G'){g++;sum[i][1] = sum[i - 1][1];sum[i][2] = sum[i - 1][2] + 1;sum[i][3] = sum[i - 1][3];}else if(s[i] == 'B'){b++;sum[i][1] = sum[i - 1][1];sum[i][2] = sum[i - 1][2];sum[i][3] = sum[i - 1][3] + 1;}}//cout<<"r :"<<r<<" G:"<<g<<" B:"<<b<<endl;//cout<<"R: "<<sum[n][1]<<" G:"<<sum[n][2]<<" B:"<<sum[n][3]<<endl;ll ans = 0;for(int i = 1; i <= n; i++)for(int k = i + 1; k <= n; k++){if(s[i] == 'R' && s[k] == 'B' ){if((k - i + 1) & 1 && s[(i + k) /2] == 'G')ans --;ans += sum[k - 1][2] - sum[i][2];}if(s[i] == 'B' && s[k] == 'R'){if((k - i + 1) & 1 && s[(i + k) /2] == 'G')ans --;ans += sum[k - 1][2] - sum[i][2];}if(s[i] == 'G' && s[k] == 'B'){if((k - i + 1) & 1 && s[(i + k) /2] == 'R')ans --;ans += sum[k - 1][1] - sum[i][1];}if(s[i] == 'B' && s[k] == 'G'){if((k - i + 1) & 1 && s[(i + k) /2] == 'R')ans --;ans += sum[k - 1][1] - sum[i][1];}if(s[i] == 'R' && s[k] == 'G'){if((k - i + 1) & 1 && s[(i + k) /2] == 'B')ans --;ans += sum[k - 1][3] - sum[i][3];}if(s[i] == 'G' && s[k] == 'R'){if((k - i + 1) & 1 && s[(i + k) /2] == 'B')ans --;ans += sum[k - 1][3] - sum[i][3];}}cout<<ans<<endl;
}
int main(){solved();return 0;
}
D - RGB Triplets(前缀和+思维)相关推荐
- 洛谷 - P1714 切蛋糕(单调队列+前缀和+思维)
题目链接:点击查看 题目大意:给出一个由n个数组成的序列,求长度不超过m的连续子段和中的最大值 题目分析:因为给出了一个限制条件,所以这就不能当普通的动态规划来做了,我们可以跑一遍前缀和,然后枚举每一 ...
- 中石油训练赛 - Block(二维前缀和+思维)
题目描述 Alice得到了一张由n×m个黑白像素点组成的图片,她想要压缩这张图片.压缩图片的过程如下: 1.首先,选择一个正整数k(k>1),将图片划分成若干个k×k的小块.如果n,m不能被k整 ...
- C - Sweets Eating 前缀和 + 思维找规律
传送门 思路:1.找出最优策略 2.优化代码 最主要的是如何优化代码,我们发现m是一个周期,在m周期类的元素不会受到影响,一旦到达一个周期,那么此时的数值就要整体移一位,这个可以用前缀和来实现. 设d ...
- 我在atcoder打比赛
我在atcoder打比赛 AtCoder Beginner Contest 177 比赛人数9636 AtCoder Beginner Contest 177 A Don't be late 化浮 ...
- 第二章:二分和前缀和 【完结】
基本熟练掌握了. 目录 789. 数的范围 [整数二分 板子题] 790. 数的三次方根 [实数二分] 795. 前缀和 [一维前缀和 板子题] 796. 子矩阵的和 [二维前缀和 板子题] 730. ...
- RGB转YCbCr算法 之Matlab FPGA实现介绍
1.引言 虽然现在RGB是计算机视觉最基本的三原色组成结构,但是YCbCr也有非常重要的角色,甚至却之不可,理由如下: 1)很多机器视觉,图像处理/检测识别算法,不关注色彩,只需要在灰度域处理即可: ...
- 所需即所获:IDE = _plugins_ + vim
新版迁移:https://github.com/yangyangwithgnu/use_vim_as_ide http://yangyangwithgnu.github.io/ 0 vim 必知会 ...
- UPC-2021个人训练赛第20场-部分题解
目录 RGB Triplets 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 Select Half 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 心灵的抚 ...
- 将VIM打造成强大的IDE
转载自:所需即所获:像 IDE 一样使用 vim 如侵犯您的版权,请联系:2378264731@qq.com --------------------------------------------- ...
- Acwing第 19 场周赛【完结】
目录 3991. 满足条件的01串[难度: 一般] 3992. 树上有猴[难度: 一般 / 知识点: 前缀和 思维] 3993. 石子游戏[难度: 中 / 知识点: 前缀和 思维] 3991. 满足条 ...
最新文章
- [BJWC2018]Border 的四种求法(后缀自动机+链分治+线段树合并)
- 前端框架除了layui还有哪些
- jquery-confirm
- leetcode 《简单》 数学部分 Python实现
- [大学回忆录-思想]一种能力的培养
- NET-TreeView控件说明
- 【图像特征提取1】方向梯度直方图HOG---从理论到实践------附带积分图像的解析
- 诺德尔-2011-2003-V1新版 ghost安装版
- 《正版 图解语音识别 语音识别入门实践教程 语音识别技术书 人工智能机器学习深度学习计算机网络编程书籍R3Z978》[日]荒木雅弘著【摘要 书评 在线阅读】-苏宁易购图书...
- 微信终端跨平台组件 mars 开源
- (二). 细说Kalman滤波:The Kalman Filter
- Spring依赖注入@Autowired原理解析(一)之寻找需要注入的属性
- 【3分钟带你学】Ajax
- 嵌入式软件开发能力提高的几个途径
- 微软2016校园招聘4月在线笔试1-Font Size
- MT4外汇结余净值可用预付款
- jquery滚动条滚动事件_滚动条和jQuery –使用航点的事件处理
- 程序 数列求和 c语言,[编程入门]有规律的数列求和-题解(C语言代码)
- MLY -- 13.Error analysis:look at dev set examples to evaluate ideas
- 给老板的一封工作感悟信