【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个点的坐标,把它们分别放到 ...
随机推荐
- Java错误:结束的字符文字
编译器为NetBeans 在学习java的时候突然出现了以下错误 错误代码是: Gen <Integer ,String> a = new Gen <Integer, String& ...
- 《Java编程思想》读书笔记-对象导论
计算机是头脑延伸的工具,是一种不同类型的表达媒体.本文以背景性的和补充性的材料,介绍包括开发方法概述在内的面向对象程序设计(Object-oriented Programming,OOP)的基本概念. ...
- cstdlib和stdlib.h区别
一.区别 #include<stdlib.h> :.h是C的习惯 #include<cstdlib> : c开头是C++的习惯 二.stdlib.h是C语言库头文件之一,包含了 ...
- DRBD搭建
基于块设备在不同的高可用服务器之间同步和镜像数据的软件,块设备可以是磁盘分区,LVM逻辑卷或整块磁盘,解决磁盘单点故障 三种复制协议 (1)协议A:异步复制协议,本地写成功后立即返回,数据放在发送bu ...
- fges
基本用法: fgets函数用来从文件中读入字符串.fgets函数的调用形式如下:fgets(str,n,fp):此处,fp是文件指针:str是存放在字符串的起始地址:n是一个int类型变量.函数的功能 ...
- linux(centos6.9)安装步骤
http://blog.csdn.net/u012453843/article/details/52819756 https://mirrors.aliyun.com/ 下载想要的版本 2选择新建虚拟 ...
- 浅谈JavaScript函数重载
上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都很难,根本回答不上来.不过那天晚上,还是很惊喜的接到了HR面电话.现在HR ...
- 解决java.lang.IllegalArgumentException: No converter found for return value of type 的问题
controller返回一个dto,并且定义了@ResponseBody注解,表示希望将这个dto对象转换为json字符串返回给前端,但是运行时报错:nested exception is java. ...
- Spring IOC(四)总结升华篇
本系列目录 Spring IOC(一)概览 Spring IOC(二)容器初始化 Spring IOC(三)依赖注入 Spring IOC(四)总结升华 =============正文分割线===== ...
- kafuka资料学习
http://blog.csdn.net/hmsiwtv/article/details/46960053