\(\mathbf{P1360}\) 题解

思路

设\(sum[t][i]\)为截至第t天第i项能力的提升总次数。

由题意可知一个时期为均衡时期\([t_1,t_2]\),当且仅当 \(\forall\;1\leq i \leq m,sum[t_2][i]-sum[t_1-1][i]\)都相等。

  1. 由上,对于每个\(t\),可以将序列\(sum[t]\)的每个数减去\(sum[t][1]\),得到一个序列\(f\)(长为\(m\)),它对应值\(t\)。
  2. 也可以用差分的方法构造序列\(f\),使\(f[i]=sum[t][i]-sum[t][i-1](1\leq i\leq m-1)\)。

这样得到一个序列集合,由这个序列集合就可以统计答案了。

可以用一个map或者Hash表维护。

根据贪心思想,在相同的\(f\)中最先出现的一定最优,所以对于每个\(t\),如果\(f\)出现过,那么更新答案\(ans=\max(ans,t-h[f])\),否则加入\(f\)。

代码

代码一:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<map>
#define N 100010
#define M 50
#define P 13331
using namespace std;
typedef unsigned long long ull; int n,m;
int f[M];
map<ull,int>mp; int read(){
int x=0,f=1;char c=getchar();
while(c<'0' || c>'9') f=(c=='-')?-1:1,c=getchar();
while(c>='0' && c<='9') x=x*10+c-48,c=getchar();
return x*f;
} ull Hash(){
ull a=0;
for(int i=1;i<=m;i++) a=a*P+f[i];
return a;
} int main(){
n=read(),m=read();
int ans=0;
mp[Hash()]=0;
for(int i=1;i<=n;i++){
int a=read();
for(int j=0;j<m;j++)
if(a&(1<<j)) ++f[j+1];
if(a&1)
for(int j=1;j<=m;j++) f[j]--;
ull H=Hash();
if(mp.find(H)!=mp.end()) ans=max(ans,i-mp[H]);
else mp[H]=i;
}
printf("%d\n",ans);
return 0;
}

代码二:

#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<vector>
#include<map>
using namespace std;
int n,m,sum[32],ans;
vector<int>b;
map<vector<int>,int>h;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<m;i++)
b.push_back(0);
h[b]=0;
for(int i=1,a;i<=n;i++)
{
scanf("%d",&a);
b.clear();
for(int j=0;j<m;j++)
{
if(a&(1<<j)) sum[j]++;
if(j) b.push_back(sum[j]-sum[j-1]);
}
if(h.find(b)!=h.end()) ans=max(ans,i-h[b]);
else h[b]=i;
}
printf("%d",ans);
return 0;
}

P1360 [USACO07MAR]Gold Balanced Lineup G的更多相关文章

  1. 洛谷 P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维)

    P1360 [USACO07MAR]Gold Balanced Lineup G (前缀和+思维) 前言 题目链接 本题作为一道Stl练习题来说,还是非常不错的,解决的思维比较巧妙 算是一道不错的题 ...

  2. POJ 3274 Gold Balanced Lineup

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

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

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

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

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

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

  6. poj3274 Gold Balanced Lineup(HASH)

    Description Farmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been abl ...

  7. Gold Balanced Lineup POJ - 3274

    Description Farmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been abl ...

  8. POJ 3274 Gold Balanced Lineup 哈希,查重 难度:3

    Farmer John's N cows (1 ≤ N ≤ 100,000) share many similarities. In fact, FJ has been able to narrow ...

  9. Gold Balanced Lineup(哈希表)

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10711   Accepted: 3182 Description Farm ...

随机推荐

  1. Centos-当前和过去登入系统用户信息-last

    last 获取当前和过去登入系统的用户相关信息,执行last指令的时候会默认读取/var/log/wtmp文件 相关参数 -a 把客户端IP显示到最后一列 -R 不显示客户端IP地址或主机名 -n 显 ...

  2. 谈谈数据库的事务ACID

    在数据库中新建一个字段并且设置为索引列,还有删除整张表的数据,类似这些操作都是一系列操作的组合,执行后不能出现中间状态,也就是不会出现新建了字段却不是索引的情况,也不会出现只有一部分数据被删除的情况. ...

  3. matlab中for 用来重复指定次数的 for 循环

    参考:https://ww2.mathworks.cn/help/matlab/ref/for.html?searchHighlight=for&s_tid=doc_srchtitle for ...

  4. 你知道CPU结构也会影响Redis性能吗?

    啦啦啦,我是卖身不卖艺的二哈,ε=(´ο`*)))唉错啦(我是开车的二哈),我又来了,铁子们一起开车呀! 今天来分析下CPU结构对Redis性能会有影响吗? 在进行Redis性能分析的时候,通常我们会 ...

  5. JavaCV FFmpeg采集摄像头YUV数据

    前阵子使用利用树莓派搭建了一个视频监控平台(传送门),不过使用的是JavaCV封装好的OpenCVFrameGrabber和FFmpegFrameRecorder. 其实在javacpp项目集中有提供 ...

  6. SHOI 2013 【扇形面积并】

    早上考的,我打了80分的部分分,出来和同学讨论的时候真想扇自己一巴掌...... 题目描述: 给定 n 个同心的扇形,求有多少面积,被至少k 个扇形所覆盖. 输入输出格式 输入格式: 第一行是三个整数 ...

  7. Springboot集成logback,控制台日志打印两次,并且是不同的线程打印的

    背景 在搭建一个新项目的时候,从公司别的项目搞了个logback-spring.xml的配置过来,修改一下启动项目的时候发现 所有的日志都输出了两次 并且来自于不同的线程,猜测是配置重复了,但是仔细检 ...

  8. 使用css实现轮播图

    使用css3实现图片轮播 前言:实现图片轮播的方式有很多种 ,例如js ,css 等等. 本文主要讲述使用纯css3实现轮播图 工具介绍: 使用的编辑器: Hbuilder 进入正题 html代码: ...

  9. swoole父进程和子进程之间通信的例子

    <?php /** 这是一个swoole父进程和子进程之间通信的例子 */ //进程创建成功后回调处理 function handle(swoole_process $worker){ //从进 ...

  10. pytest文档43-元数据使用(pytest-metadata)

    前言 什么是元数据?元数据是关于数据的描述,存储着关于数据的信息,为人们更方便地检索信息提供了帮助. pytest 框架里面的元数据可以使用 pytest-metadata 插件实现.文档地址http ...