【集训Day1 测试】【USACO】照相

USACO铜组测试2解题报告 USACO 2021年1月铜组 阅读详情

照相(fairphoto)
【题目描述】
有N 头奶牛站在一条数轴上,第 i 头奶牛的位置是 Pi,奶牛不会重叠站在同一个位置,
第i 头奶牛的颜色是 Ci,其中 Ci 要么是字符‘G’要么是字符‘H’。现在农夫 FJ 想给一段连续的奶牛照一张相,前提是满足一下三个条件之一:
1、这连续一段奶牛的颜色全部是‘G’。
2、这连续一段奶牛的颜色全部是‘H’。3、这连续一段奶牛,颜色是‘H’的奶牛数量和颜色是‘G’的奶牛数量相等。
FJ 要求照出来的相尽可能的宽,不妨设相片中最右边奶牛位置是 Pj, 相片中最左边奶牛位置是 Pi,那么 FJ 要使得 Pj-Pi 最大。如果照片只有一头奶牛,那么输出 0。
【输入格式】fairphoto.in
第一行,一个整数 N。1 <= N <= 100000。
接下来有 N 行,每行的格式是: Pi、Ci。 0 <=Pi <=1,000,000,000
【输出格式】fairphoto.out
一个整数。【输入样例】
6
4 G
10 H
7 G
16 G
1 G
3 H
【输出样例】
7
【解题思路】
此题看似简单,其实却因为数据量而提高了难度。首先,连续一段奶牛全部是同颜色的这两类非常容易找,只需要使用最朴素的算法过一遍就可以了。
但是第三类,也就是两种颜色出现的数量相同的这一类,如果暴力枚举,必然超时。
所以利用前缀和,将H视作1,将G视作-1(反之也可行)。依照这个求出前缀和。例如,求出的前缀和为1,0,1,0,1,-1,0,1;可以发现第一位和最后一位的前缀和是相等的。也就是说,从第二个开始加上去,加到最后一个,其实相当于没有改变过,没有改变过意味着这其中1和-1的数量相等,那么也就意味着这段符合第三类的标准,只要这样求出最长的即可。
【解题反思】

  • 多角度利用自己所学的知识进行解题
  • 注意答案是最右边的减去最左边的,而不是从最左边的到最右边的之间有多少奶牛

【参考程序】

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct data
{
    int a;//奶牛在数轴上的位置 
    int b;//奶牛的颜色,转化为1和-1 
}c[100001];
bool comp(data s,data r)
{
    return s.a<r.a;
}
int n,g,h,d[100001],f[200001];
long long maxans,ans,len;
int tmp;
int main()
{
    freopen("fairphoto.in","r",stdin);
    freopen("fairphoto.out","w",stdout);
    scanf("%d",&n);
    for (int i=1;i<=n;i++) 
    {
        scanf("%d %s",&c[i].a,&c[i].b); 
        if (c[i].b=='H') c[i].b=1;
        else c[i].b=-1;
    }
    sort(c+1,c+1+n,comp);//以位置进行排序,方便寻找 
    d[1]=100000+c[1].b;//为了防止下标出现负数,全部加上十万 
    for (int i=2;i<=n;i++) d[i]=d[i-1]+c[i].b;//求出前缀和 
    tmp=1;
    len=0;
    for (int i=2;i<=n;i++)
    {
        if (c[i-1].b!=c[i].b) 
        {
            len=c[i-1].a-c[tmp].a;
            maxans=max(maxans,len); 
            tmp=i;
        } 
    }//暴力寻找第一类和第二类中最长的 
    maxans=max(maxans,len);//最后还需要进行一次比较,因为最长的有可能在最后一段却没有比较 
    for (int i=1;i<=n;i++)
    {
        if (f[d[i]]==0) f[d[i]]=i;//标记该前缀和是否出现过和他第一次出现的位置 
        else 
        {   
            ans=c[i].a-c[f[d[i]]+1].a;//求长度 
            maxans=max(ans,maxans);//比较 
        }
    }
    cout<<maxans;
    return 0;
}
USACO试题精选 USACO的一些题目代码和月赛十年题典,以及部分题解 立即下载

相关推荐

Docker安装Nacos(详细教程)

Docker安装Nacos的步骤相对直接,但需要注意一些细节以确保安装成功。

weixin_73060959的博客 1405

选牛题解

选牛 题目描述 在一条坐标轴上,有n头奶牛,第i头奶牛的位置是Xi。FJ现在要选出三头奶牛去比赛,不妨假设选择了奶牛a,b,c。那么必须要满足: 1:Xa<Xb<Xc。 2:Xb-Xa≤Xc - Xb≤2×(Xb-Xa)。 你的任务是计算,FJ总共有多少种不同的选择? 输入输出格式 输入格式: 第一行,一个整数N。(3≤N≤1000)。 接下来有N行,第i行是整数Xi。 输出格式: 一行,一个整数。 输入输出样例 输入样例: 5 3 1 10 7 4 输出样例: 4 思路: 二分查找 #include&lt

qq_57360246的博客 780

【python】geopandas库安装出现各种问题?可以看看这篇文章

geopandas的安装方法

jgsecurity的博客 3886

排队的奶牛

Description 农夫约翰的N只奶牛排成了一条直线,每只奶牛都有一个特定的标识序号,从左到右第i只奶牛的编号是Bi。 约翰认为他的奶牛队列中存在某段连续区间都是相同序号的,那他的队列就非常的美观。为了创造这样的一个连续区间,约翰决定将某个特定的序号的奶牛全部剔除队列。 问题描述: 请帮助约翰计算出通过选择除去某个特定序号的全部奶牛后...

293

VS Code + Codex 在 WSL 中使用的正确姿势

Codex 登录只能在本地完成。文件仍可通过 UNC 路径访问 WSL → 本地 Codex 就能照常工作。避免在 WSL 内重复安装/登录 Codex 扩展。

yangguangwuyue的博客 9822

matianl:SAP 最详细的权限管理解析

上文所说的系统自带权限对象与权限字段仅能满足有限的需要,其权限审核的逻辑也是系统硬编码了的,我们能做的只是是否启用某项权限对象的检查(使用SU22)。如果需要自定义,通过SU20、SU21定义即可。

matinal 當冬夜漸暖 。公众号:matinal 2153

JZOJ 3.10 1539——三条直线

题目描述 FJ想使用购买的新监控系统监视他的N头奶牛(1 <=N<= 50,000)。 第i头牛位置在(x_i, y_i),这是一对整数坐标,范围在0…1,000,000,000之内。FJ的监控系统有3个特殊的镜头,每一个镜头能够观察垂直或者水平的一行。 请决定FJ是否有可能架设这3个镜头,使他能够观察到所有的N头牛。也就是说,请决定N头牛的位置是否能同时被...

weixin_30570101的博客 269

泛微OA表单开发实战:如何用JavaScript动态控制明细表的必填与可编辑属性

本文详细介绍了如何在泛微OA系统中使用JavaScript动态控制明细表字段的必填与可编辑属性。通过主表字段变更事件监听和明细表字段属性批量修改,实现智能化的表单交互,提升用户体验和系统灵活性。文章深入解析了关键API的使用方法,并提供了实战代码示例和最佳实践。

weixin_30955617的博客 546

金华集训Day1——宇

2019年7月28日,金华集训Day1前言概率与期望1.概念随机变量:有多种可能的取值的变量2.公式①无穷次方公式②概率积公式③概率和公式3. 前言 说好的第一天数论呢?哪来的概率与期望!说好的第一天数论呢?哪来的概率与期望!说好的第一天数论呢?哪来的概率与期望! 概率与期望 1.概念随机变量:有多种可能的取值的变量 P(A)P(A)P(A):事件AAA发生的概率 E(X)E(X)E(X):随...

weihongyu_2023的博客 1066

从单应矩阵到实际距离:Apriltag测距完整实现指南

本文提供了基于Apriltag实现高精度视觉测距与姿态估计的完整指南。详细阐述了从相机标定、单应矩阵分解到欧拉角与距离计算的完整流程,并深入探讨了四个解的歧义选择、工程实践中的滤波优化与多Tag融合等关键问题,旨在帮助开发者在机器人、AR等应用中实现稳定可靠的距离检测与姿态估计。

n7o8p的博客 559

PADS VX2.4差分对设置避坑指南:常见错误与解决方案

本文深度解析了在PADS VX2.4中进行高速PCB设计时,差分对设置的核心要点与常见陷阱。针对Layout规则设置、Router布线实战中的阻抗控制、线长匹配等关键环节,提供了具体的避坑指南和解决方案,帮助工程师确保信号完整性,提升设计质量。

weixin_29216049的博客 359

BJ 集训测试10 城市

http://www.elijahqi.win/archives/2783 圆上均匀分布n 个点 然后 在这n个点中连n-3条边 且这些边不相交 有q次询问每次询问两点间的最短距离 因为原图是平面图所以可以考虑转成对偶图 然后点分治 不想写对偶图&amp;点分治可以考虑边分治 每次选择一条边 将这条边左右的边的数量尽量平均分布 因为这题比较特殊是在一个圆环上 所以考虑 我给所有点标号...

Elijahqi 290

AUTOSAR TcpIp模块 以太网配置开发2

someip协议之tcpIp协议

汽车电子电气 1085

AcWing 1170 排队布局

题目描述: 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些。 农夫约翰有N头奶牛,编号从1到N,沿一条直线站着等候喂食。 奶牛排在队伍中的顺序和它们的编号是相同的。 因为奶牛相当苗条,所以可能有两头或者更多奶牛站在同一位置上。 如果我们想象奶牛是站在一条数轴上的话,允许有两头或更多奶牛拥有相同的横坐标。 一些奶牛相互间存有好感,它们希望两者之间的距离不超过一个给定的数L。 另一方面,一些奶牛相互间非常反感,它们希望两者间的距离不小于一个给定的数D。 给出ML条关于两头奶牛...

昂昂累世士的博客 403

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

2020.3.4普及C组 fairphoto【纪中】【前缀和】【贪心】

某巨佬讲课时截下来的图 #include<algorithm> #include<iostream> #include<cstdio> #include<cmath> using namespace std; int ans,c[1000010],n,js; char x; struct node { int a,b; }e[1000005]; ...

JA_yichao欢迎你 cnblogs账号:https://www.cnblogs.com/mayichao/ 237

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

选牛(二分查找)

#227. 选牛 题目描述 在一条坐标轴上,有n头奶牛,第i头奶牛的位置是Xi。FJ现在要选出三头奶牛去比赛,不妨假设选择了奶牛a,b,c。那么必须要满足: 1:Xa<Xb<Xc。 2:Xb-Xa≤Xc - Xb≤2×(Xb-Xa)。 你的任务是计算,FJ总共有多少种不同的选择? 输入输出格式 输入格式: 第一行,一个整数N。(3≤N≤1000)。 接下来有N行,第i行是整数Xi...

weixin_33859504的博客 331

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【集训Day1 测试】奇怪数

奇怪数(odometer) 【题目描述】 一个正整数Z是奇怪数,当且仅当满足的条件是:Z的所有数字中,只有一个数字不同于其他数字。例如:33323、110 都是奇怪数,而 9779、5555 都不是奇怪数。给出两个正整数 X 和 Y,满足 100 <= X <= Y <= 10^16,请问区间[X,Y]内有多少个奇怪数? 【输入格式】odometer.in 一行,两个整数,X 和 Y。 【

WSR的安全屋 1132

【2019 1月集训 Day1】回文的后缀

题意:   给定 n,s,求有多少个字符集大小为 s ,长度为 n 的字符串,使得其不存在一个长度大于 1 的回文后缀。   答案对 m 取模。 分析:   考场见到计数题的链式反应,想写暴力—>暴力难写—>不会暴力—>弃疗—>爆零。   今天考试也不例外。但是逐渐思想过于摸化,没想到今天T2这么简单的一个递推,竟然不会写,我好弱啊,大概是学废了。  ...

daxian3723的博客 252

NKOI 3750 奶牛拍照

P3750奶牛拍照 问题描述    约翰的n(1    在大家都长时间保持微笑,等待约翰按下快门的时候,约翰突然停了下来,因为他发现奶牛们并没有按照身高由低到高的顺序排列(每头奶牛的高度都不相同),这样的话就拍不出满意的照片,于是约翰决定调整一下奶牛们的位置。    这下可扫了奶牛们的兴,大家决定为难一下约翰。奶牛们告诉约翰,要调整位置可以,每次只能选择连续一段奶牛出来,然后将这一段整

SuperGate的博客 1501

【集训Day1 测试】装饰

装饰(decorate) 【题目描述】 一个图有 N 个结点,编号 1 至 N,有 M 条无向边,第 i 条边连接的两个结点是 Ai 和Bi,其中 Ai 和 Bi 是不同的结点。可能有多条边连接的是同一个点对。现在要给每个结点做标致,每个结点的标志要么是‘F’,要么是‘J’。如果结点 A 和结点 B 之间有边,那么结点 A 和结点 B 的标志就必须不同。做一个‘F’的费用比做一个‘J’的费用要高

WSR的安全屋 507

noip2019集训测试赛(四)A.fibonacci

Description 给定一个长度为 N 的序列 A={a1,a2,…,an} . M 次操作, 每次操作形如下面两种中的一种: 1 l r x 将 al,al+1,...,ara_l,a_{l+1},...,a_ral​,al+1​,...,ar​ 都加上 x ; 2 l r 求∑i=lrf(ai) mod (109+7)\sum_{i=l}^rf(a_i)\ mod\ (...

tylon2006的博客 489

【集训Day2 哈希表】【NHOI2015】【Luogu P2421】差

LuoguP2421 原题来自NHOI2015 【解题思路】 本题的解题方法有三种,一种为枚举减数,二分查找被减数。第二种为利用数据单调性用尺取法进行查找,第三种为运用哈希表以快速查找数据。 【解题反思】 一题可能有多种解法,尝试选择自己最擅长的。 【参考程序】#include<iostream> #include<cstdio> using namespace std; int n

WSR的安全屋 694

站在自己该站的位置上

 作者:陬人  在星期六的一个阳光明媚的上午,我的朋友――那个骄傲的父亲勃比*来维斯带着他的两个小儿子去高尔夫球场打球。  他走到球场售票处问那里面的工作人员:“请问门票是多少钱?”  里面的年轻人回答他:“所有满6周岁的人进入球场都需要交3美元,先生。我们这个球场让6岁以下的儿童免费进入,请问你的两个孩子多大了?”  勃比回答道:“我们家未来的律师3岁了,我们家未来的医生7岁了,所以我想我应该付

xiedurensheng的专栏 749

施一公到底有多牛(据说他的研究成果逼得国外很多实验室都关了门)?

作者:伏地魔王大人 他们确实非常牛,具体你们看高票的回答就好了。 11g培养的是跟寿司之神一样的人才。 这是一种什么精神呢?职人精神! 在寿司之神那里,你第一件工作就是拧毛巾。大概要拧1年。要又干爽又有热气。 第二件事是煮饭,至少要煮3年以上的训练。卖米的大叔都说只有寿司之神才配煮我们家的米饭。 第三件事就是煎蛋。要学至少10年,你才有机会碰鱼。 寿司之神的儿子讲,我都60了还没有完全学好,每...

龙哥盟 5万+
上一篇: 【集训Day1 测试】奇怪数
下一篇: 【集训Day1 测试】装饰
苟岂
博客等级 码龄10年 20粉丝 44原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值