【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正则表达式appendReplacement和appendTail方法
appendReplacement是java中替换相应字符串的一个方法 appendReplacement(StringBuffer sb,String replacement) 将当前匹配子串替换为 ...
- Fibonacci Heaps
Mergeable heapsA mergeable heap is any data structure that supports the following five operations,in ...
- 剑指Offer 33. 丑数 (其他)
题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 题目地 ...
- [转]C++11常用特性的使用经验总结
转载出处 http://www.cnblogs.com/feng-sc C++11已经出来很久了,网上也早有很多优秀的C++11新特性的总结文章,在编写本博客之前,博主在工作和学习中学到的关于C++1 ...
- UVa699
这个建树的根选的很有意思,在中间作为树的根.所以二叉树建树的方法虽然一般是有两种数组的方法,一个是如果深度不太大的话,可以之间用2*k+1,2*k建树,如果很大的话,就挨着建树,弄一个结构体,有左右子 ...
- node day1 login
https://blog.csdn.net/weixin_33901641/article/details/85967847 vue之node.js的简单介绍 http://nodejs.cn/ ht ...
- javascript常见的几种事件类型
第一种事件类型:onchange() <body> <select id="sheng" onchange="fn1();"> < ...
- 监控端口是否开放,端口未开放关闭虚拟ip,端口开放启动虚拟IP
#!/bin/bash#该脚本监控本机的一个端口,当端口异常时,停止lvs的本地ip直到恢复.该脚本依托于lvs.sh启动脚本#目前只支持监控1个vip #定义常用变量#配置检查的ip以及端口chec ...
- 【java】static的应用场景
定义静态原则: 什么时候定义静态变量:对象中出现共享数据时,该数据被static所修饰.如国家 什么时候定义静态方法:当功能内部没有访问到非静态数据时,该方法可以定义成静态的 工具类的例子: /** ...
- 通过zipfile解压指定目录下的zip文件
代码: # -*- coding: utf-8 -*- import os import zipfile import platform import multiprocessing # 解压后的文件 ...