CF 1133C Balanced Team
题目分析
(个人感受:我看错了题目,硬是写了近一个小时!)
这个题目要求一个最长的序列,使得这个序列的每一个数之间的差值的绝对值都小于或等于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的更多相关文章
- 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 ...
- Codeforces Round #544 (Div. 3) C. Balanced Team
链接:https://codeforces.com/contest/1133/problem/C 题意: 给n个数, 在这n个数中选最多n个数,来组成一个队伍. 保证这n个数的最大最小差值不大于5. ...
- Solution -「CF 757F」Team Rocket Rises Again
\(\mathcal{Description}\) link. 给定 \(n\) 个点 \(m\) 条边的无向图和一个源点 \(s\).要求删除一个不同与 \(s\) 的结点 \(u\),使得 ...
- Codeforces Round #544 (Div. 3)解题报告
A.Middle of the Contest 考虑把输入的时间单位化成分钟,相加除以2就好了 #include<bits/stdc++.h> using namespace std; # ...
- CodeForces Round #544 Div.3
A. Middle of the Contest 代码: #include <bits/stdc++.h> using namespace std; int h1, m1, h2, m2; ...
- CF-544:部分题目总结
-------------------昨天打的重现赛,感觉是我打的发挥的最好的一场比赛了,六题都一次AC.那么就来总结一下吧 题目链接:http://codeforces.com/contest/11 ...
- 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 ...
- 【Cf edu 30 B. Balanced Substring】
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- 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_ ...
随机推荐
- Nmap简单的漏扫
转载至 https://www.4hou.com/technology/10481.html 导语:Nmap本身内置有丰富的NSE脚本,可以非常方便的利用起来,当然也可以使用定制化的脚本完成个人的 ...
- exgcd 解同余方程ax=b(%n)
ax=n(%b) -> ax+by=n 方程有解当且仅当 gcd(a,b) | n ( n是gcd(a,b)的倍数 ) exgcd解得 a*x0+b*y0=gcd(a,b) 记k=n/gc ...
- [洛谷P3941]:入阵曲(前缀和+桶)
题目传送门 题目背景 丹青千秋酿,一醉解愁肠.无悔少年枉,只愿壮志狂. 题目描述 小$F$很喜欢数学,但是到了高中以后数学总是考不好.有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识 ...
- linux shell 值coredump suid_dumpable和 gdb解析coredump文件
可以设置产生coredump文件,设置dump文件命名非格式,生成dump文件的路径: linux # set suid_dumpable on if [ -e /proc/sys/kernel/su ...
- python进程间的通信
from multiprocessing import Queue, Process import time, random # 要写入的数据 list1 = ["java", & ...
- redis 提供 6种数据淘汰策略
淘汰策略的原因 在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的.譬如,在一台 8G 机子上部署了 4 个 redis 服务点,每一个服 ...
- 开启两个线程,一个线程打印A~Z,一个线程打印1~52的数据
开启两个线程,一个线程打印A-Z,一个线程打印1-52的数据 import java.util.concurrent.locks.Condition; import java.util.concurr ...
- Android 获取Bitmap方式
1.获得当前项目资源文件(assets)下图片 (1).获得图片数据流 private Bitmap getBotMapInfo() { Bitmap bitmap = null; try { Inp ...
- 统计网络time_wait连接状态及tcpip连接数
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' LAST_ACK 1 SYN_RECV 14 ESTABLIS ...
- 码云上webide怎么提交
修改后想提交,它会提示:“暂存文件后才能提交”, 我拿放大镜找遍了整个界面也没找到“暂存”按钮, 原来,文件旁边那个+号就是暂存,好歹鼠标方式去之后给个tip,服了. 点一下这个加号,提交按钮就可用了 ...