【FZSZ2017暑假提高组Day1】确定小组
【问题描述】
有n个人坐成一排,这n个人都在某一个小组中,同一个小组的所有人所坐的位置一定是连续的。
有一个记者在现场进行采访,他每次采访都会询问一个人其所在的小组有多少人,被询问的每个人都给出了正确的答案,但是由于时间仓促,记者不一定询问了每个人,我们记录一个长度为n的答案序列,序列的第i个数表示第i个人的回答,如果为0则表示记者没有询问过这个人。
记者发现,对于一些情况,他可以唯一确定这排所有人的分组,而对于另外一些情况则不能,于是记者开始好奇,对于某一个答案序列,他能不能做到这一点,如果能的话输出1,否则输出0。
【输入格式】
第一行一个正整数T,表示数据组数。
接下来T组数据,每组数据第一行一个正整数n,表示人数,接下来一行n个非负整数表示答案序列,数据保证至少有一种分组方式能生成该答案序列。
【输出格式】
对于每一组测试数据输出一行一个数(0或1),表示答案。
【输入样例】
4
5
0 2 3 0 0
3
0 2 0
6
3 0 0 0 0 3
6
0 0 3 3 0 0【输出样例】
1
0
1
0【数据规模与约定】
对于20%的数据,有1<=n<=15,
对于50%的数据,有1<=n<=100,
对于100%的数据,有1<=n<=1000,1<=T<=50,输入数据中每个答案序列一定由某一组合法的座位分配方案生成。
题目分析
这道题让我产生了topsort的冲动。然后我成功的证明了我是个傻逼。这一题不难,但是很难想出来。从一个残缺的数列里面确定一个数列。我们注意到了key number就是不是零的数,如果当前的数字不同,我们就得出是两个不同的小组,如果相同,不能得到这个结论。如果我们找到的数字恰好把中间的空余部分填满,我们就从前一个地方更新答案。所以用一个数组来记录到i为止出现的可能排列,暴力枚举转移方程即可,
#include<bits/stdc++.h>
using namespace std;
#define RE register int
#define N 1001
#define IL inline
int T,n,a[N],f[N];
signed main(){
freopen("group.in","r",stdin),freopen("group.out","w",stdout);
cin>>T;
while(T--){
cin>>n;
for (RE i=;i<=n;++i) cin>>a[i];
memset(f,,sizeof f),f[]=;
for (RE i=;i<=n;++i){
for (RE x=,j=i;j;--j){
if (a[j]){
if (x&&a[j]^x) break;
x=a[j];
}if (!x||i-j+==x)
if ((f[i]=min(,f[j-]+f[i]))==) break;
}
}
if (f[n]==) cout<<<<"\n";
else cout<<<<"\n";
}
}
代码说明
f[0]=1,这个不要忘记了啊。有两种ker number或者是不能填坑就不更新,否则我们更新答案,只有0,1,2这些可能。
我经过详细的调查后,得到了结论。我们班的一对小情侣因为太招摇被家长发现了,然后他们改用手机交流,变成了地下党没人知道。才谈了半年就要分了,如果女方会写函数式可持久化区间查找区间修改的线段式高级树形数据结构,他们就知道这个要持久化。
读者:尼玛,说主席树会死啊。
我:下回分解。。。
【FZSZ2017暑假提高组Day1】确定小组的更多相关文章
- 【FZSZ2017暑假提高组Day1】华容道游戏
		[问题描述] 华容道是一种有趣的滑块游戏,大概是下面这个样子的. 游戏局面由一个2*2的曹操滑块,五个2*1的蜀将滑块(横竖是不定的).四个1*1的小兵滑块以及两个空的位置构成,玩家需要利用空的位子移 ... 
- 【FZSZ2017暑假提高组Day1】最大矩形
		[问题描述] 现在有n个宽度为1的矩形按如下图(左边的)所示的方式排在了一起: 用肉眼容易看出,在左图内部面积最大的矩形如右图绿色部分所标注. 现在我们考虑将其中一些宽度为1的矩形取出,按照原顺序再次 ... 
- 【FZSZ2017暑假提高组Day2】圆盘时钟
		[问题描述] 作为出题人的小Z相信大家对上图这样的圆盘时钟都不会陌生——在理想圆盘时钟上,秒针每一分钟转一圈,分针每一小时转一圈,时针每12小时转一圈,它们均是匀速转动的,在0点时三条针均指向表盘上的 ... 
- luogu1003铺地毯[noip2011 提高组 Day1 T1]
		题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ... 
- 18/9/9牛客网提高组Day1
		牛客网提高组Day1 T1 中位数 这好像是主席树??听说过,不会啊... 最后只打了个暴力,可能是n2logn? 只过了前30% qwq #include<algorithm> #in ... 
- Noip2011 提高组 Day1 T1 铺地毯 + Day2 T1 计算系数
		Day1 T1 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小 ... 
- Noip2011 提高组 Day1 T3 Mayan游戏
		题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ... 
- GZOJ 1361. 国王游戏【NOIP2012提高组DAY1】
		国王游戏[NOIP2012提高组DAY1] Time Limit:1000MS Memory Limit:128000K Description 国王游戏(game.cpp/c/pas) [问题描述] ... 
- 暑假提高组集训Day1 T1
		说实话,今天的题真的有点难! ~备受打击~ 我们先来看一看第一题吧 看起来好像不太简单,其实并不难 下面来提供两种方法吧 1.做法一 //签到题 /* 那么这一题就是告诉你n个点的坐标,把它们分别放到 ... 
随机推荐
- 马凯军201771010116《面向对象程序设计(java)》第一周学习总结
			马凯军201771010116<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.co ... 
- 22.一个球从100m高度自由下落,每次落地后返跳回原高度的一半,再反弹。求它在第10次落地时,共经过多少米,第10次反弹多高。
			#include <stdio.h> #include <stdlib.h> int main() { ,hn=sn/; int i; ;i<=;i++) //注意i是从 ... 
- Object.create(null)、Object.create({})、{} 三者创建对象的区别
			参考 1.先看看我们经常使用的{}创建的对象是什么样子的: var o = {a:1}; console.log(o) 从上图可以看到,新创建的对象继承了Object自身的方法,如hasOwnProp ... 
- Ubuntu Server 16.04设置WiFi
			wifi :http://www.cnblogs.com/joeyupdo/p/3350463.html http://blog.csdn.net/meic51/article/details/173 ... 
- PyCharm介绍与基础操作
			PyCharm是一种Python IDE(集成开发软件),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具. 1.1 PyCharm主界面 PyCharm包含4个主要区分,分别为菜单 ... 
- 素数定理π(n)~n/lnn弱化版证明
			在大半年前写的Miller-Rabin素数测试正确性证明中使用过此结论~当时完全不会证,现在进步了一点点会证弱化版的了Orz 完整版的素数定理: π(n):=|{p|p<=n,p是素数}| li ... 
- LADP(Lightweight Directory Access Protocol)轻量目录访问协议~小知识
			What is LDAP and how does it work(implementation)? LDAP stands for “Lightweight Directory Access Pro ... 
- alpha冲刺(4/10)
			前言 队名:旅法师 作业链接 队长博客 燃尽图 会议 会议照片 会议内容 陈晓彬(组长) 今日进展: 召开会议 安排任务 博客撰写 问题困扰: pm和程序猿的交流到底应该怎么样呢,会出现,不做安排的任 ... 
- rabbitmq management advance lesson
			rabbitmq management advance management install rabbitmq-plugins enable rabbitmq_management visit : h ... 
- Python3之set, frozenset记录
			set1 = set([1, 2, 3, 4]) set2 = frozenset([1, 2, 3, 4]) print(set1, set2, sep='|||') set1.add(" ... 
