题目链接:http://codeforces.com/problemset/problem/1133/C

题目分析

(个人感受:我看错了题目,硬是写了近一个小时!)

这个题目要求一个最长的序列,使得这个序列的每一个数之间的差值的绝对值都小于或等于5。

想到求序列中的数的差值的问题,我在想,如果这个序列是单调递增的,那岂不是直接用序列尾部取和头部比较,如果差小于等于5,那么这个序列是满足条件的。

而我们需要找出所有的这样的序列的最长者,我有个大胆的想法,如果题目给出的序列a[]就是单调递增的,当我们用s代表当前序列的左边界,e代表右边界,那么如果a[e+1] - a[s] <= 5 ,那么我们就可以将e+1拉入这个序列,从而实现右边界向右扩展以得到新的合法序列;

因为 a[x+1] >= a[x] (就是因为是单调递增序列) , 如果a[e+1] - a[s] <= 5 ,那么对于区间[s,e]的任意一个数x都有a[e+1]>=a[x] , 所以序列[s,e+1]是符合条件的序列之一;

我们用 len 记录这些合法序列中的最长者(我之前以为需要找到整体的skill值最高的序列的长度,结果上演了和评测机大战了数个回合,终以我的失败而告终的一段经典!)。

在每次将右边界向右扩展的时候,当前序列的长度会增加,这样我们就需要比较当前序列和len的大小了.

如果a[e+1] - a[s] > 5  ,那么也很好办,之所以会出现这个情况,就是因为左边界s太小了,我们只需要将左区间向右移动一个位置,然后再去和a[e+1]比较,其差值一定小于等于之前的差值;同时这个序列新序列[s+1,e]肯定是合法的(不用解释了吧);当然,如果当前的s == e ,我们需要同时将右边界向右移动一个位置。

我们将区间[s,e]从[1,1]开始不断地向右扩展,这样就可以得到所有合法序列了,不过记得对题目给的序列排个序嗯。

代码区

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include <vector>
#include<stack>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int Max = 2e5 + ;
const int mod = 1e9 + ; ll a[Max]; int main()
{
ll n;
while (scanf("%I64d", &n) != EOF)
{
for (ll i = ; i <= n; i++)
{
scanf("%I64d", a + i);
}
sort(a + , a + + n);
ll s = ;
ll e = ; //[s,e]表示当前区间 ll len = ; //整个最长
while (e < n)
{
//cout << "[ " << s << " , " << e << " ]" << endl;
if (a[e + ] - a[s] <= )
{
++e; //区间[s,e] --> [s,e+1],now + a[e+1] len = max(len, e - s + );
}
else
{
if (s == e)
{
s = ++e;
}
else
{
s++;
}
}
}
printf("%I64d\n", len);
}
return ;
}

CF 1133C Balanced Team的更多相关文章

  1. Codeforces Round #544 (Div. 3) Editorial C. Balanced Team

    http://codeforces.com/contest/1133/problem/Ctime limit per test 2 secondsmemory limit per test 256 m ...

  2. Codeforces Round #544 (Div. 3) C. Balanced Team

    链接:https://codeforces.com/contest/1133/problem/C 题意: 给n个数, 在这n个数中选最多n个数,来组成一个队伍. 保证这n个数的最大最小差值不大于5. ...

  3. Solution -「CF 757F」Team Rocket Rises Again

    \(\mathcal{Description}\)   link.   给定 \(n\) 个点 \(m\) 条边的无向图和一个源点 \(s\).要求删除一个不同与 \(s\) 的结点 \(u\),使得 ...

  4. Codeforces Round #544 (Div. 3)解题报告

    A.Middle of the Contest 考虑把输入的时间单位化成分钟,相加除以2就好了 #include<bits/stdc++.h> using namespace std; # ...

  5. CodeForces Round #544 Div.3

    A. Middle of the Contest 代码: #include <bits/stdc++.h> using namespace std; int h1, m1, h2, m2; ...

  6. CF-544:部分题目总结

    -------------------昨天打的重现赛,感觉是我打的发挥的最好的一场比赛了,六题都一次AC.那么就来总结一下吧 题目链接:http://codeforces.com/contest/11 ...

  7. CF A and B and Team Training (数学)

    A and B and Team Training time limit per test 1 second memory limit per test 256 megabytes input sta ...

  8. 【Cf edu 30 B. Balanced Substring】

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  9. CF 932E Team Work

    原题题面 题目大意:求\(\sum\limits_{i=0}^{n}C_{n}^{i}i^{k}\). 我们根据套路\(n^{k}=\sum\limits_{i=0}^{k}C_{n}^{i}i!S_ ...

随机推荐

  1. Centos 7 安装 Xilinx SDSoC Development Environment

    1.CentOS版本信息 $ cat /etc/redhat-releaseCentOS Linux release 7.6.1810 (Core) 2.SDSoC下载地址: https://www. ...

  2. [洛谷P3941]:入阵曲(前缀和+桶)

    题目传送门 题目背景 丹青千秋酿,一醉解愁肠.无悔少年枉,只愿壮志狂. 题目描述 小$F$很喜欢数学,但是到了高中以后数学总是考不好.有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识 ...

  3. Data Science Competition中的工具汇总

    除了基础的pandas,scikit-learn,numpy,matplotlib,seaborn以外 ( 1 ) category_encoders github 属于scikit-learn co ...

  4. SRS之接收推流线程:recv

    SrsPublishRecvThread.SrsRecvThread.SrsReusableThread2.SrsThread 之间的关系图 1. recv 线程函数:SrsThread::threa ...

  5. js第一次学习心得

    最近开始接触js,用的是阮一峰的菜鸟教程,相对来说我觉得是比较通俗易懂的,用了很多很小的例子去讲每一个很小的细节,但对于我这种因为即将到来的团队作业做准备的,也没有办法将每个细节都理解的清楚,主要的把 ...

  6. Mybatis多值传递的方式

    一共有三种方式 1.参数传入Map 2参数使用@params 3.直接使用时用#{0},#{2} 参考网址 :https://www.2cto.com/database/201409/338155.h ...

  7. android data binding jetpack IV 绑定一个方法另一种写法和参数传递

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  8. Android Butterknife(黄油刀) 使用方法总结

    前言: ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤.是大神J ...

  9. ArrayList && HashMap扩容策略

    ArrayList扩容策略:默认10 扩容时是base + base/2, 即10 15 22 33 49...扩容时不安全:grow方法扩容时,赋值 elementData = Arrays.cop ...

  10. pandas中的reset_index()

    数据清洗时,会将带空值的行删除,此时DataFrame或Series类型的数据不再是连续的索引,可以使用reset_index()重置索引. import pandas as pd import nu ...