洛谷 P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维)
P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维)
前言
本题作为一道Stl练习题来说,还是非常不错的,解决的思维比较巧妙
算是一道不错的题
思路分析
第一眼看到这题,我还以为是数据结构题,看来半天没看出来数据结构咋做(我还是太菜了)
我们对\(m\)种能力有\(n\)次操作,需要找到对每种能力提升相同的最大操作区间的长度,求最大
区间,我们考虑维护这\(m\)种技能提升值的前缀和,假设第\(l+1\)次操作到第\(r\)次操作对\(m\)个
能力的提升相同,那么一定有一个重要的性质,任取\(m\)种操作中的一种操作\(q\),执行第\(l\)
次操作后,每一种技能提升值的前缀和与q的提升值前缀和的差值与执行
\(r\)操作后相等,该性质是很显然的,
因为区间操作后对每种技能提升相同,所以差值也一定相同。所以\(l\)到
\(r\)就是一个均横时期,根据此性质我们就可以解决该题了。
我们先选定一种能力,用vector维护所有能力与其的差值,执行某一次操作后,若发现此时的
差值与过去某一次操作后差值相等(用map维护),那么从过去的那次操作(不包含其本身)到当
前操作就是一个均衡时期。我们扫一遍操作,找到最大长度即可。
代码
我的代码借鉴了楼上那篇用map实现的超短的题解
orz太强了,在此我对其进行部分解释
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<string>
#include<vector>
#define int long long
using namespace std;
const int maxn=1e5+10;
inline int read(){
int ret=0;
int f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-f;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
ret=ret*10+(ch^'0');
ch=getchar();
}
return ret*f;
}
int n,m;
int ans,q;
map<vector<int>,int>a;
signed main(){
n=read();
m=read();
vector<int>p(m+10);
a[p]=0;//记得初始化,不然会wa
for(int i=1;i<=n;i++){
q=read();
for(int j=0;j<m;j++){
if(q&(1<<j)){
p[j]++;//维护前缀和
}
}
if(q&1)
for(int j=0;j<m;j++){
p[j]--;
}
/*上述操作是在维护差值,我们选取第一种能力作为标准值,也就是上述
的q,如果本次操作对第一种能力有提升,因为我们要获得差值,所以就要把所给所有能力减1;
*/
if(a.count(p)){//count函数,获得相同判断过去的操作是否有相同差值
ans=max(ans,i-a[p]);//获取最大长度,为什么不+1,应为不包含左端区间
}
else a[p]=i;
}
cout<<ans<<endl;
return 0;
}
如果对此有疑惑,欢迎评论。
洛谷 P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维)的更多相关文章
- P1360 [USACO07MAR]Gold Balanced Lineup G
\(\mathbf{P1360}\) 题解 思路 设\(sum[t][i]\)为截至第t天第i项能力的提升总次数. 由题意可知一个时期为均衡时期\([t_1,t_2]\),当且仅当 \(\forall ...
- 洛谷P1360 [USACO07MAR]黄金阵容均衡Gold Balanced L…
P1360 [USACO07MAR]黄金阵容均衡Gold Balanced L… 题目描述 Farmer John's N cows (1 ≤ N ≤ 100,000) share many simi ...
- 洛谷 P1360 [USACO07MAR]黄金阵容均衡Gold Balanced L…
P1360 [USACO07MAR]黄金阵容均衡Gold Balanced L… 题目描述 Farmer John's N cows (1 ≤ N ≤ 100,000) share many simi ...
- 洛谷P1360 [USACO07MAR]黄金阵容均衡题解
题目 不得不说这个题非常毒瘤. 简化题意 这个题的暴力还是非常好想的,完全可以过\(50\%\)的数据.但是\(100\%\)就很难想了. 因为数据很大,所以我们需要用\(O(\sqrt n)\)的时 ...
- POJ 3274 Gold Balanced Lineup
Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10924 Accepted: 3244 ...
- 哈希-Gold Balanced Lineup 分类: POJ 哈希 2015-08-07 09:04 2人阅读 评论(0) 收藏
Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13215 Accepted: 3873 ...
- 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 510 S ...
- POJ 3274:Gold Balanced Lineup 做了两个小时的哈希
Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13540 Accepted: ...
- 洛谷SP22343 NORMA2 - Norma(分治,前缀和)
洛谷题目传送门 这题推式子恶心..... 考虑分治,每次统计跨过\(mid\)的所有区间的答案和.\(i\)从\(mid-1\)到\(l\)枚举,统计以\(i\)为左端点的所有区间. 我们先维护好\( ...
随机推荐
- ES2020链判断运算符?.和Null判断运算符??
链判断运算符 ?. 业务场景: 1 // 假设data是个数组,如果data没有值,为undefinded,则直接复制会报错,因为没有length这个属性 2 3 const dateCount = ...
- 求职时这样回答问题你就输了!来自IT类面试官视角的深度解读
摘要:在IT工程师准备写简历时,经常会遇到这些令人头疼的问题:应届生没有实践经验:不确定哪些信息该写不该写:不知道如何在简历上展现自己的优势:不知道如何编写项目经验一栏:为了高大上写上了自己不熟悉的技 ...
- jupyter IPthon常用命令
Jupyter IPython 一.安装Anaconda 到官网下载Anaconda安装包 双击Anaconda3-5.0.0-Windows-x86_64.exe文件 会出现如下的页面 1. 点击i ...
- think PHP5.1使用时 session重定向丢失问题
查了很多资料,也看了redirect底层代码,具体来说,还是多个用的地方不太对.做个笔记防忘记: 遇重定向后丢失session时: 1.php.ini配置文件,不要自动启动,默认是0,session. ...
- 「SHOI2015」超能粒子炮・改
「SHOI2015」超能粒子炮・改 给你\(T\)组询问,每组询问给定参数\(n,k\),计算\(\sum\limits_{i=0}^k\dbinom{n}{i}\). \(T\leq10^5,n,k ...
- os00
- 运行状态:占用处理机资源运行,处于此状态的进程数小于等于CPU数# 操作系统* 进程和线程 * [进程和线程有什么区别?](#进程和线程有什么区别) * [进程间通信有哪些方式?](# ...
- 10 XSRF和XSS
10 XSRF和XSS CSRF(Cross-site request forgery)跨站请求伪造 XSS(Cross Site Scripting)跨站脚本攻击 CSRF重点在请求,XSS重点在脚 ...
- 11 幂等 Idempotence
11 幂等 Idempotence HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用.(注意是副作用) GET http://www.bank.com/account/123456 ...
- Linux Capabilities 入门教程:进阶实战篇
原文链接:https://fuckcloudnative.io/posts/linux-capabilities-in-practice-2/ 该系列文章总共分为三篇: Linux Capabilit ...
- 搭建vue-cli4.0项目
① Vue CLI的包名称由 vue-cli 改成了 @vue/cli. 如果已经全局安装了旧版本的 vue-cli(1.x或2.x), 你需要先通过 npm uninstall vue-cli ...