Straight Master Gym-101775J (思维+差分)
题意:给出N种类的数量,求是否可以把N种牌按3-5张连续的顺子打出,顺子必须连续.
分析:相当于把这个序列分成若干长度为[3,5]的区间,当然其实分成若干段大于3的区间即可.因为大于5的区间又可以分拆成若干段长度为[3,5]的区间.
令\(b[i] = a[i] - a[i-1]\), 则\(b[i] >0\) 表示有\(b[i]\)段区间以此为起点, \(b[i] < 0\)表示有\(|b[i]|\)段区间以\(i-1\)为终点. 那么对于每个区间的起点i,必须在i+3开始的位置一直向后寻找终点,且起点和终点必须数量相等,若不相等则不能打出顺子.
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN = 2e5+5;
LL a[MAXN], b[MAXN];
int N;
bool check()
{
LL sum = 0;
if(b[2] <0 || b[3]<0) return false;
for(int i=1;i<=N+1;++i){
int p = i + 3;
if(b[i] > 0) sum += b[i];
if(p > N+1) break;
if(b[p]<0 ){
sum += b[p];
b[p] = 0;
}
if(sum<0) break;
}
if(sum !=0) return false;
return true;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
int T,cas=1; scanf("%d",&T);
while(T--){
scanf("%d", &N);
for(int i=1;i<=N;++i){
scanf("%lld", &a[i]);
b[i] = a[i] - a[i-1];
}
b[N+1] = -a[N];
printf("Case #%d: ",cas++);
if(check()) printf("Yes\n");
else printf("No\n");
}
return 0;
}
Straight Master Gym-101775J (思维+差分)的更多相关文章
- LZH的多重影分身 qduoj 思维 差分
LZH的多重影分身 qduoj 思维 差分 原题链接:https://qduoj.com/problem/591 题意 在数轴上有\(n\)个点(可以重合)和\(m\)条线段(可以重叠),你可以同时平 ...
- Straight Master (贪心)
题目如下:A straight is a poker hand containing five cards of sequential rank, not necessarily to be the ...
- Gym 101775J Straight Master(差分数组)题解
题意:给你n个高度,再给你1~n每种高度的数量,已知高度连续的3~5个能消去,问你所给的情况能否全部消去:例:n = 4,给出序列1 2 2 1表示高度1的1个,高度2的2个,高度3的2个,高度4的1 ...
- 2017 ECL-FINAL J.Straight Master
题目链接:http://codeforces.com/gym/101775/problem/J 思路:序列差分一下,然后用得到的查分序列乱搞就可以了 注意差分序列第一项等于a[i],之后n-1项为ch ...
- Gym - 101981E 思维
Gym - 101981EEva and Euro coins 题意:给你两个长度皆为n的01串s和t,能做的操作是把连续k个相同的字符反转过来,问s串能不能变成t串. 一开始把相同的漏看了,便以为是 ...
- Magic Stones CodeForces - 1110E (思维+差分)
E. Magic Stones time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- 2017CCPC 杭州 J. Master of GCD【差分标记/线段树/GCD】
给你一个n个初始元素都为1的序列和m个询问q. 询问格式为:l r x(x为2or3) 最后求1~n所有数的GCD GCD:把每个数分别分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就是 ...
- AtCoder Beginner Contest 188 D - Snuke Prime (思维,差分)
题意:你需要订阅一些服务,每个服务每天需要花费\(c_i\),要从第\(a_i\)用到第\(b_i\)天,你可以购买会员,会员每天需要花费\(C\),但是这天的服务不用再另花钱了,问你订阅这些服务的最 ...
- Problem D. Berland Railroads Gym - 101967D (思维)
题目链接:https://cn.vjudge.net/contest/274029#problem/D 题目大意:给你0-9每个数的个数,然后让你找出最大的数,满足的条件是任意三位相连的都能被三整除. ...
随机推荐
- Eclipse & Visual Studio
VS中的解决方案 vs Eclipse中的workspace Maven包管理 vs Nuget类库管理 build path vs
- MP 及OMP算法解析
转载自http://blog.csdn.net/pi9nc/article/details/18655239 1,MP算法[盗用2] MP算法是一种贪心算法(greedy),每次迭代选取与当前样本残差 ...
- Struts2_day04--自定义拦截器_Struts2的标签库_表单标签
自定义拦截器 1 在struts2里面有很多的拦截器,这些拦截器是struts2封装的功能,但是在实际开发中,struts2里面的拦截器中可能没有要使用的功能,这个时候需要自己写拦截器实现功能 2 拦 ...
- 过滤一个Collection最好的方法
private static List<Integer> filter(List<Integer> list){ Iterator<Integer> it = li ...
- python中的函数的执行分类
author:headsen chen date: 2018-03-21 17:42:13 notice:This article created by headsen chen himself ...
- Android中的TextView实现多行显示省略号以及下划线的实现
android:lines="2" android:ellipsize="end" 显示两行,多余部分…显示 textView.getPaint().setFl ...
- Hibernate中的一对一映射关系
Hibernate中的一对一映射关系有两种实现方法(单向一对一,和双向一对一)(一对一关系:例如一个department只能有一个manager) 单向和双向有什么区别呢??例如若是单向一对一,比如在 ...
- Code Forces 22B Bargaining Table
B. Bargaining Table time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- MySQL - 查询今天的数据(以及昨天、本月、上个月、今年...) 查询Datetime 时间的数据
1,查询当天(今天)的数据 1 SELECT * FROM `order` WHERE TO_DAYS(order_time) = TO_DAYS(NOW()) 2,查询昨天的数据 1 SELECT ...
- Flask之flask-session
简介 flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方,如: redis:保存数 ...