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 (前缀和+思维)的更多相关文章

  1. P1360 [USACO07MAR]Gold Balanced Lineup G

    \(\mathbf{P1360}\) 题解 思路 设\(sum[t][i]\)为截至第t天第i项能力的提升总次数. 由题意可知一个时期为均衡时期\([t_1,t_2]\),当且仅当 \(\forall ...

  2. 洛谷P1360 [USACO07MAR]黄金阵容均衡Gold Balanced L…

    P1360 [USACO07MAR]黄金阵容均衡Gold Balanced L… 题目描述 Farmer John's N cows (1 ≤ N ≤ 100,000) share many simi ...

  3. 洛谷 P1360 [USACO07MAR]黄金阵容均衡Gold Balanced L…

    P1360 [USACO07MAR]黄金阵容均衡Gold Balanced L… 题目描述 Farmer John's N cows (1 ≤ N ≤ 100,000) share many simi ...

  4. 洛谷P1360 [USACO07MAR]黄金阵容均衡题解

    题目 不得不说这个题非常毒瘤. 简化题意 这个题的暴力还是非常好想的,完全可以过\(50\%\)的数据.但是\(100\%\)就很难想了. 因为数据很大,所以我们需要用\(O(\sqrt n)\)的时 ...

  5. POJ 3274 Gold Balanced Lineup

    Gold Balanced Lineup Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10924 Accepted: 3244 ...

  6. 哈希-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 ...

  7. 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

    1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 510  S ...

  8. POJ 3274:Gold Balanced Lineup 做了两个小时的哈希

    Gold Balanced Lineup Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13540   Accepted:  ...

  9. 洛谷SP22343 NORMA2 - Norma(分治,前缀和)

    洛谷题目传送门 这题推式子恶心..... 考虑分治,每次统计跨过\(mid\)的所有区间的答案和.\(i\)从\(mid-1\)到\(l\)枚举,统计以\(i\)为左端点的所有区间. 我们先维护好\( ...

随机推荐

  1. Netty关闭连接流程分析

    在实际场景中,使用Netty4来实现RPC框架,服务端一般会验证协议,最简单的方法的协议探测,判断魔数是否正确.如果服务端无法识别协议会立即抛出异常,并主动关闭连接,此时客户端会收到read信号,在发 ...

  2. B. Two Arrays 解析(思維)

    Codeforce 1417 B. Two Arrays 解析(思維) 今天我們來看看CF1417B 題目連結 題目 略,請直接看原題. 前言 a @copyright petjelinux 版權所有 ...

  3. Java动态代理——框架中的应用场景和基本原理

    前言 之前已经用了5篇文章完整解释了java动态代理的原理,本文将会为这个系列补上最后一块拼图,展示java动态代理的使用方式和应用场景 主要分为以下4个部分 1.为什么要使用java动态代理 2.如 ...

  4. Java SPI 机制实现解耦与本地化

    SPI 是 Java 提供的一种服务加载方式,全名为 Service Provider Interface,可以避免在 Java 代码中写死服务的提供者,而是通过 SPI 服务加载机制进行服务的注册和 ...

  5. STM32移植FreeRTOS(1)

    "STM32F103VET6<_>FreeRTOS" 1.项目功能实现 1)LED灯定时闪烁 2)KEY按键检测 3)FreeRTOS任务创建 4)串口输出程序运行状态 ...

  6. 一文搞懂后台高性能服务器设计的常见套路, BAT 高频面试系列

    微信搜索「编程指北」,关注这个写干货的程序员,回复「资源」,即可获取后台开发学习路线和书籍 先赞后看,养成习惯~ 前言 金九银十,又是一年校招季. 经历过,才深知不易.最近,和作为校招面试官的同事聊了 ...

  7. 力扣 - 19. 删除链表的倒数第N个节点

    目录 题目 思路1 代码实现 思路2 代码实现 题目 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, ...

  8. LR逻辑回归附代码

    参考https://zhuanlan.zhihu.com/p/74874291 import pandas as pdpd.set_option('display.max_columns', 500) ...

  9. 想更改Github仓库中的某个文件结构

    虽然有各种版本回退啥的,可是感觉好麻烦,还是没搞来,后来发现可以直接先删除,然后在本地更改,更改完之后重新添加一次即可 删除远程库的某个文件: $ git pull origin master 将远程 ...

  10. SQL:获取每个key下最新创建的记录

    今天遇到了一个好玩的问题 问题: 有一个含有key和createdTime字段的表,表里存在很多不同的key值,每个key值下有很多记录. 我想要查出每个key下面cratedTime最大的记录,即每 ...