51NOD 1400 序列分解
传送门:1400 序列分解序列分解
小刀和大刀是双胞胎兄弟。今天他们玩一个有意思的游戏。 大刀给小刀准备了一个长度为 $n$ 的整数序列。小刀试着把这个序列分解成两个长度为 $n/2$ 的子序列。
这两个子序列必须满足以下两个条件:
1.他们不能相互重叠。
2.他们要完全一样。
如果小刀可以分解成功,大刀会给小刀一些糖果。
然而这个问题对于小刀来说太难了。他想请你来帮忙。
第一行给出一个T,表示T组数据。(1<=T<=5)
接下来每一组数据,输入共2行。
第一行包含一个整数n (2<=n<=40且为偶数)。
第二行给出n个整数a[0],a[1],a[2],…,a[n-1]表示大刀给小刀准备的序列。(-1,000,000,000<=a[i]<=1,000,000,000)第一行给出一个T,表示T组数据。(1<=T<=5)
接下来每一组数据,输入共2行。
第一行包含一个整数n (2<=n<=40且为偶数)。
第二行给出n个整数a[0],a[1],a[2],…,a[n-1]表示大刀给小刀准备的序列。(-1,000,000,000<=a[i]<=1,000,000,000)
如果小刀可以完成游戏,输出"Good job!!" (不包含引号),否则 输出"What a pity!" (不包含引号)。如果小刀可以完成游戏,输出"Good job!!" (不包含引号),否则 输出"What a pity!" (不包含引号)。
2
4
1 1 2 2
6
1 2 3 4 5 62
4
1 1 2 2
6
1 2 3 4 5 6
Good job!!
What a pity!Good job!!
What a pity! 分析:
暴力。DFS 递归地扩展出一棵解答树。节点(DFS)参数为 $(i, j, k)$ ,表示当前两子序列待确定 (active) 列中可
用(active) 的位置是 $k$ 。(其实 $k$ 是可有可无的参数,因为 $k = i+j-1$ ,但添上也无妨)代码中加上了一些剪枝。
不失一般性,可认为原序列的首元素属于第一个子序列,因此初始调用参数可设为 $( 2, 1, 2)$ 。 P.S. 考虑这个问题时,没想出非暴力的解法,只是看出:
如果原序列可分成两个相等的子列,那么原序列的首、尾一定也是子列的首、尾。
若有更好的解法,望在评论里告知。
#include<bits/stdc++.h>
using namespace std;
int a[], N, x[], y[];
bool dfs(int i, int j, int k){
bool res;
if(k>N) return true;
if(i>N>>){
return a[k]==x[j]?y[j]=a[k], dfs(i, j+, k+):false;
}
if(j>N>>){
return a[k]==y[i]?x[i]=a[k], dfs(i+, j, k+):false;
}
if(i==j){
x[i]=a[k];
if(dfs(i+, j, k+)) return true;
y[j]=a[k];
return dfs(i, j+, k+);
}
if(i>j){
res = x[j]==a[k]?y[j]=a[k],dfs(i, j+, k+):false;
if(res) return res;
return x[i]=a[k],dfs(i+, j, k+);
}
if(j>i){
res = y[i]==a[k]?x[i]=a[k],dfs(i+, j, k+):false;
if(res) return res;
return y[j]=a[k],dfs(i, j+, k+);
}
}
int main(){
//freopen("in", "r", stdin);
int T;
scanf("%d", &T);
while(T--){
scanf("%d", &N);
int res=;
for(int i=; i<=N; i++) scanf("%d", a+i), res^=a[i];
if(res){
puts("What a pity!");
continue;
}
x[]=a[];
puts(dfs(, , )?"Good job!!":"What a pity!");
}
return ;
}
51NOD 1400 序列分解的更多相关文章
- 1400 序列分解(dfs)
1400 序列分解 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 小刀和大刀是双胞胎兄弟.今天他们玩一个有意思的游戏. 大刀给小刀准备了一个长度为n的整数序列.小 ...
- 51nod 算法马拉松3 A:序列分解
序列分解 System Message (命题人) 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 小刀和大刀是双胞胎兄弟.今天他们玩一个有意思的游戏. 大刀给小刀准备了一个长度为n ...
- [NC13B]贝伦卡斯泰露/[51Nod1400]序列分解
[NC13B]贝伦卡斯泰露/[51Nod1400]序列分解 题目大意: 给定\(A_{1\sim n}(n\le40)\),问是否能将\(A\)分解成两个相同的子序列? 思路: 折半搜索.时间复杂度\ ...
- 【python cookbook】【数据结构与算法】1将序列分解为单独的变量
如果对象是可迭代的(任何序列),则可以进行分解操作,包括元组.列表.字符串.文件.迭代器以及生成器,可通过简单的一个赋值操作分解为单独的变量. 唯一要求:变量的总数和序列相吻合,否则将出错: Pyth ...
- 51nod 1258 序列求和 V4
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1258 1258 序列求和 V4 基准时间限制:8 秒 空间限制:131 ...
- 51NOD 1258 序列求和 V4 [任意模数fft 多项式求逆元 伯努利数]
1258 序列求和 V4 题意:求\(S_m(n) = \sum_{i=1}^n i^m \mod 10^9+7\),多组数据,\(T \le 500, n \le 10^{18}, k \le 50 ...
- 51nod 1062 序列中最大的数【打表】
1062 序列中最大的数 题目来源: Ural 1079 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 有这样一个序列a: a[0] = 0 a[ ...
- 51nod 1228 序列求和(伯努利数)
1228 序列求和 题目来源: HackerRank 基准时间限制:3 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 T(n) = n^k,S(n) = T(1 ...
- 51nod 1228 序列求和 ( 1^k+2^k+3^k+...+n^k )
C为组合数,B为伯努利数 具体推到过程略 参考博客:http://blog.csdn.net/acdreamers/article/details/38929067# (我的式子和博客中的不一样,不过 ...
随机推荐
- iOS9 判断微信qq是否安装
iOS 9检测QQ.微信是否安装无效的解决方法 在info.plist里面添加LSApplicationQueriesSchemes(Array类型),然后插入weixin, wechat, mqq的 ...
- canvas仿屏幕保护运动线条
canvas是H5中及其重要的一个新标签,它得出现不仅让前端做图形图表功能变得异常强大,还用极强的性能丰富前端渲染页面的能力. Life is not a problem to be solved, ...
- NOI 1.7编程基础之字符串(35题)
01:统计数字字符个数 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一行字符,统计出其中数字字符的个数. 输入 一行字符串,总长度不超过255. 输出 ...
- VSFTPD配置TLS/SSL
今天在OSX上配置Coda2 + Xampp的时候,发现FTP老是不连接到服务器上面,导致每次更改了文件都需要使用scp命令上传到服务器.如果一个文件还好,文件和文件夹一多就得使用rp参数全部提交,再 ...
- AD域的安装
AD域的安装 初始化设置,改计算机名字dcserver,改静态ip,改dns指向自己. dcpromo,执行后自动装了dns. 装完后检查 1,本地用户没了 2,dns指向自己 3,dns记录是否 ...
- [tools]QuickPing
一款神器 quickping 能够很快的探测出该网断分出去哪些地址. 在线的会显示绿色 在线的+有主机名的显示为亮绿色
- benchmark
redis benchmark How many requests per second can I get out of Redis? Using New Relic to Understand R ...
- Java系列,《Java核心技术 卷1》,chapter 13,集合
13.1.2 Java类库中的集合接口和迭代器接口 删除元素,对于next和remove的调用是互相依赖的,如果调用remove之前没有调用next,则会跑出IllegalStateExcep ...
- [CareerCup] 10.7 Simplified Search Engine 简单的搜索引擎
10.7 Imagine a web server for a simplified search engine. This system has 100 machines to respond to ...
- 使用logstash+elasticsearch+kibana快速搭建日志平台
日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: * 根据关键字查询日志详情 * 监控系统的运行状况 * 统计分析,比如接口的调用次数.执行时间.成功 ...