zzulioj 2174
来源:互联网 发布:calibre安卓软件 编辑:程序博客网 时间:2024/06/08 02:48
题目链接 :https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2174
思路
按照题意需要将小姐姐的QQ号分为两个不改变原先数字顺序的数组,那么就可以从小姐姐的QQ号的第一位开始依次考虑是要将该数组给a数组好呢,还是给b数组好呢,这是两种情况。
先将QQ号首位先给a数组,然后再在之后找一个跟a数组第一个一样的数字,假如将它给了b数组,那么这之间的数字一定都是a数组的,这之后的可能有需要给a数组的,所以当判断到QQ号的某一位的时候,b数组的长度一定是不大于a数组的。
1> 给b数组需要满足一个条件:
如果将当前数给b数组的第i位,那么一定得有a[i]等于当前这个数才可以。
2> 如果当前这个数不满足给b数组的条件,或者这个数不想给b数组, 也就是都可以直接给a数组,当然前提是a数组的长度没有超过原QQ号的位数的一半。
代码
#include <bits/stdc++.h>using namespace std;int a[20], b[20], s[40], flag;void dfs(int n, int la, int lb, int i){ if (flag || la > n / 2) return; if (la == n / 2 && lb == n / 2) { flag = 1; return; } if (la == 0) // 起始将s[0]放在a[0]中 { a[la] = s[i]; dfs(n, la + 1, lb, i + 1); } else { if (s[i] == a[lb]) // 如果当前数字和a中的(b的下一位长度)那一位数字相同,那么将它放到b中 dfs(n, la, lb + 1, i + 1); a[la] = s[i];//不把当前数字放在b中,那么这一位得放a中 dfs(n, la + 1, lb, i + 1); }}int main(){ int t; while (scanf("%d", &t) == 1 && t) { while (t --) { int n; scanf("%d", &n); for (int i=0 ; i<n ; i++) scanf("%d", &s[i]); flag = 0; dfs(n, 0, 0, 0); puts(flag? "竟然还有这种操作" : "没有这种操作"); } } return 0;}
阅读全文
0 0
- zzulioj 2174
- ZZULIoj 2174: 小XX的QQ号 ( DFS
- zzulioj--1816
- ZZULIOJ--1798
- zzulioj-1895
- zzulioj-1899
- ZZULIOJ-1894
- 【zzulioj 1922】
- 【zzulioj 1921 】
- zzulioj 1919
- zzulioj 1875
- ZZULIOJ 2121
- ZZULIOJ 2123
- ZZULIOJ 2126
- zzulioj 2134
- 【ZZULIOJ 】 几道水题
- ZZULIOJ 1726: 迷宫
- zzulioj 1726: 迷宫
- int *ptr=(int *)(&a+1)
- 解决docker-py api版本不兼容问题
- 暑假训练总结
- 动作过滤器
- Kotlin 第三章:Kotlin 基础之基本类型
- zzulioj 2174
- [py]tornado分页实现-从本质到完全实现
- kali 渗透测试
- SQL SERVER行级锁
- 1. OpenMAX系列 —— ACodec和OMX的联系
- Dropout随记
- struct list_head list使用的一种错误
- oracle查询使用别名那点事儿
- chromium WebUI实例