博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Week11作业 D-必做题11-4
阅读量:3951 次
发布时间:2019-05-24

本文共 790 字,大约阅读时间需要 2 分钟。

题目

东东和他的女朋友(幻想的)去寿司店吃晚餐(在梦中),他发现了一个有趣的事情,这家餐厅提供的 n 个的寿司被连续的放置在桌子上 (有序),东东可以选择一段连续的寿司来吃
东东想吃鳗鱼,但是东妹想吃金枪鱼。核 平 起 见,他们想选择一段连续的寿司(这段寿司必须满足金枪鱼的数量等于鳗鱼的数量,且前一半全是一种,后一半全是另外一种)我们用1代表鳗鱼,2代表金枪鱼。
比如,[2,2,2,1,1,1]这段序列是合法的,[1,2,1,2,1,2]是非法的。因为它不满足第二个要求。
东东希望你能帮助他找到最长的一段合法寿司,以便自己能吃饱。
Input
输入:

第一行:一个整数n(2≤n≤100000),寿司序列的长度。

第二行:n个整数(每个整数不是1就是2,意义如上所述)

Output
输出:一个整数(代表东东可以选择的最长的一段连续的且合法的寿司)

题目解析

要找到最长的那段区间,也就是说本题就是给你一个序列,比如1 1 2 2 1 1 1 2 2 2你会很容易发现选最后那6个是最长的,就是选一半连续的1,一半连续的2,1和2个数相等,不分孰前孰后最后输出总长度,那么怎么找涅?用s1记录1长度,s2记录2的长度,s1和s2选取长度最小那个作为标准长度,然后继续找,找出满足上述条件(半1半2)长度最长的标准长度。代码如下

Codes

#include
using namespace std;const int maxn=1e5+10;int main(){
int n,a[maxn],ans=0,s1=0,s2=0,s=0,f1=0,f2=0; cin>>n; for(int i=0;i
>a[i]; if(a[0]==1) f1=s1=1; else if(a[0]==2) f2=s2=1; for(int i=1;i

转载地址:http://gdwzi.baihongyu.com/

你可能感兴趣的文章
Android开发——监控造成UI卡顿的原因
查看>>
设计模式——设计模式三大分类以及六大原则
查看>>
Java技术——同步锁的各种知识总结
查看>>
Android开发——适配终结者AutoLayout
查看>>
Android开发——ListView局部刷新的实现
查看>>
Java技术——Java中的参数传值方式
查看>>
Android开发——本地验证码的简易实现
查看>>
Java技术——CopyOnWriteArrayList源码解析
查看>>
Java技术——ReentrantLock的Condition的作用以及使用
查看>>
数据结构——搜索树树、B-树、B+树
查看>>
Android开发——带你彻底理解 Window 和 WindowManager
查看>>
设计模式——责任链模式详解
查看>>
设计模式——适配器模式详解
查看>>
设计模式——装饰模式详解
查看>>
Android开发——关于RxJava的知识总结
查看>>
Android开发——View的生命周期总结
查看>>
Android开发——Protocol Buffer的使用(比XML、Json快很多)
查看>>
Android开发——Android系统启动以及App启动过程
查看>>
Android开发——简述RxJava框架的实现原理
查看>>
Android开发——今日头条APK瘦身之路
查看>>