Problem Description:

端午节快到了,小蛋准备到集市上买粽子。于是周六这天,小蛋和舍友搭着公交到了西南市场。说来也怪,这天集市上就只有n个人在卖粽子,整齐地排成一列,而且第i(1<=i<=n)个人前面有Xi个粽子堆在一起。小蛋这人平时很大方,买东西也很讲究,这次就想自掏腰包,准备买很多粽子送给同学和老师们吃。那么问题来了,有n个人在卖粽子,怎么个买法呢?小蛋就想在n个人中连续地选择k个相邻的人买他们全部的粽子,要求所选的这k个连续相邻的人各自卖的粽子数量不能有相同的个数,并且使得k最大。

Input:

输入有多组数据
第一行输入一个整数n(0<n<=100000),表示集市上有n个人在卖粽子。
第二行输入n个整数,第i个数表示第i个人卖的粽子数量Xi(0 < Xi <= 1000)。

Output:

输出符合条件的最大值k,每个输出占一行

Sample Input:

7
3 2 4 1 3 2 3
5
1 6 3 1 2

Sample Output:

4
4
解题思路:滑动窗口,尺取法思想。找到一个最长的连续子序列,使得里面的元素都不相同。set容器维护,时间复杂度是O(nlog(n))。紫书讲得好:假设序列元素从0开始编号,所求连续子序列的左端点为L,右端点为R。从R=0开始不断增加R,相当于把所求序列的右端点往右延伸。当无法延伸(即A[R+1]在子序列A[L~R]中出现过)时,只需增大L,并且继续延伸R。既然当前的A[L~R]是可行解,L增大之后必然还是可行解,所以不必减少R,继续增大即可。
AC代码一之set:
 #include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+;
int n,x[maxn],l,r,ans;set<int> st;
int main(){
while(~scanf("%d",&n)){
for(int i=;i<n;++i)scanf("%d",&x[i]);
l=r=ans=;st.clear();
while(r<n){
while(r<n&&!st.count(x[r]))st.insert(x[r++]);
ans=max(ans,r-l);
st.erase(x[l++]);
}
printf("%d\n",ans);
}
return ;
}
AC代码二之map:思路和操作跟上面一样,非常巧妙地处理了区间中不同元素的下标。
 #include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+;
int n,l,r,ans,x,last[maxn];map<int,int> cur;
int main(){
while(~scanf("%d",&n)){
memset(last,,sizeof(last));cur.clear();
for(int i=;i<n;++i){
scanf("%d",&x);
if(!cur.count(x))last[i]=-;///如果还没出现,则标记为-1
else last[i]=cur[x];///否则记录上一次出现的下标
cur[x]=i;///更新当前x的坐标
}
l=r=ans=;
while(r<n){
while(r<n&&last[r]<l)r++;///如果当前last[r]!=l说明该区间中所有元素都不同,则继续向右延伸r,否则l++,即左端点向右蠕动
///cout<<l<<endl;
ans=max(ans,r-l);
l++;
}
printf("%d\n",ans);
}
return ;
}
/*
i 0 1 2 3 4 5 6
A[i] 3 2 4 1 3 2 3
last[i] -1 -1 -1 -1 0 1 4
*/

ACM_买粽子(UVA唯一的雪花)的更多相关文章

  1. Uva 11572 唯一的雪花

    题目链接:https://uva.onlinejudge.org/external/115/11572.pdf 题意:找到一个尽量长的连续子序列 Al ~ AR ,使得该序列没有相同的元素. 分析:枚 ...

  2. UVa 11572 唯一的雪花(滑动窗口)

    https://vjudge.net/problem/UVA-11572 题意:输入一个长度为n的序列A,找到一个尽量长的连续子序列,使得该序列中没有相同的元素. 思路:很简单的题,也没啥好解释的了. ...

  3. UVa 11572 唯一的雪花(优化策略)

    题目描述: 输入一个长度为n(n<=1000000)的序列A, 找到一个尽量长的连续子序列A(L)-->A(R),是的该序列中没有相同的元素. 输入: T:代表组数 n:代表有n个数 这一 ...

  4. UVA - 11572 Unique Snowflakes(唯一的雪花)(滑动窗口)

    题意:输入一个长度为n(n <= 10^6)的序列A,找到一个尽量长的连续子序列AL~AR,使得该序列中没有相同的元素. 分析: 法一:从r=0开始不断增加r,当a[r+1]在子序列a[l~r] ...

  5. 全局唯一Id:雪花算法

    雪花算法-snowflake 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有 ...

  6. [ACM_水题] UVA 11729 Commando War [不可同时交代任务 可同时执行 最短完成全部时间 贪心]

    There is a war and it doesn't look very promising for your country. Now it's time to act. You have a ...

  7. [ACM_水题] UVA 11292 Dragon of Loowater [勇士斗恶龙 双数组排序 贪心]

    Once upon a time, in the Kingdom of Loowater, a minor nuisance turned into a major problem. The shor ...

  8. [ACM_水题] UVA 12502 Three Families [2人干3人的活后分钱,水]

      Three Families  Three families share a garden. They usually clean the garden together at the end o ...

  9. 集训第四周(高效算法设计)K题 (滑窗问题)

    UVA 11572 唯一的雪花 题意:给你从1到n的数组,要求求得其中的最长连续不重复子序列,经典的滑窗问题,方法是维护一个窗口,设置左框和右框,然后不断的进行维护和更新 方法一: #include& ...

随机推荐

  1. PAT_A1018#Public Bike Management

    Source: PAT A1018 Public Bike Management (30 分) Description: There is a public bike service in Hangz ...

  2. ceph对接openstack环境

    环境准备: 保证openstack节点的hosts文件里有ceph集群的各个主机名,也要保证ceph集群节点有openstack节点的各个主机名 一.使用rbd方式提供存储如下数据: (1)image ...

  3. Shell脚本备份数据库

    使用crontab 定时备份数据库 1. 编辑crontab 规则,定时执行脚本 2. 在my.cnf 文件中加 [mysqldump] user=root password=密码 3.编写shell ...

  4. Django REST framework 分页

    三种分页:根据页码.根据索引.根据加密 http://www.xx.com/courses/?page=1&size=10 http://www.xx.com/courses/?offset= ...

  5. The Forth Week

    1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. cp -r /etc/skell /home/tuser1 ; ...

  6. Silverlight之我见——数据批示(2)

    接着上一回的话题,继续来研究数据批示特性,先拿简单的RageAttribute来弄弄,接着上次的示例,添加一个Age属性,并加上RangeAttribute. [Range(20,60,ErrorMe ...

  7. 使用androidstudio 分析内存泄漏

    分析内存泄漏 http://www.jianshu.com/p/c49f778e7acf

  8. javascript 闭包笔记

      先来解释一下闭包: 1.闭包就是函数嵌套函数 2.内部函数可以引用外部函数的参数和变量 3.参数和变量不会被垃圾回收机制所收回( 垃圾回收机制就是用完变量之后就在内存中释放 ) 使用闭包的好处: ...

  9. [置顶] Git学习总结(1)——Git使用详细教程

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  10. Performance Metrics(性能指标2)

    这一章我们将讨论性能指标的优化(如CPU利用率和执行时间的优化是如此的重要),下面是一章本书性能优化的章节示意图: 不同的指标都适合于不同的性能测量领域,如数据库访问时间的性能测量可能不适合评价一个客 ...