day2

第一题

回文串:abcba等

现在有x种字符,每个字符有a[i]个,问能不能组成回文串,全用?

输入:

3

1 2 3

输出:YES或NO

YES

Day2–BFS,搜索优化 2018 年 2 月 6 日 



这题是今天的签到题,很容易;

其实和BFS,搜索优化没什么关洗只有找到规律就AC了

就看个数,如果基数个数的字符>=2;就不能组成回文串;

标程:

#include<bits/stdc++.h>

using namespace std;

int main()

{

  int n,a[3000],x=0;

cin>>n;

for(i=1;i<=n;i++){ cin>>a[i]; if(a[i]%2==1) x++;)

if(x>1) cout<<"NO";

else cout<<"YES";

 return 0;

}


第二题:

矩阵编码
【问题描述】
有一边长为n的正方形,n是2的x次方;

正方形内的数,只有0和1;

如果数不是都一样,就沿边长的一半分成4个,4个里面一样就不分,不一样还把自己分成4快;


Day2–BFS,搜索优化 2018 年 2 月 6 日 矩阵编码
整棵树可以用它的宽度优先遍历得到的结果来表示,如右图的树可
以表示成:
(1)(0,0)(1)(0,1)(1)(0,0)(0,1)(1)(0,0)(0,0)(0,0)(0,1)(0,1)(0,0)(0,1)(0,0)(0,1)

(1)表示要分,(0,0)表示不分,后一个0表示都是0;
删掉括号和逗号,我们可以得到一个更简短的纯二进制编码:
100101100011000000010100010001
现在请你编写一个程序,求出给定矩阵的二进制形式的编码。
【输入格式】
第一行一个正整数?,表示数据组数。
每组数据第一行一个正整数?,表示矩阵的大小,保证存在正整数?,
使得? = 2 ? ,接下来是一个? * ?的待编码的01矩阵,同一行相邻两个数
之间有空格隔开。
【输出格式】
对每组数据输出一行,表示该图片的二进制编码。
【样例输入】
2
2
0 0
第 4 页 共 10 页
Day2–BFS,搜索优化 2018 年 2 月 6 日 矩阵编码
0 0
4
0 0 1 1
0 0 1 1
1 1 0 0
1 1 0 0
【样例输出】
00
100010100
【数据规模】
对于50%的数据,1 ≤ ? ≤ 10,2 ≤ ? ≤ 64。
对于100%的数据,1 ≤ ? ≤ 50,2 ≤ ? ≤ 512,每个测试点中? ≥
128的数据不超过3组。
数据规模较大,请使用stdio.h中的scanf和printf函数进行输入输出。


 思路:其实很简单,只要用DFS强模拟就AC;了

我还没AC;

无标程;后面会加



第三题:

染色
【问题描述】
给一个矩形没上色的地方上色,要求从左上角到右下角(只能向右和下)的每一条路和这条路的其他颜色不同,问有多少种可能性??
【输入格式】
第一行为一个正整数?,表示数据组数。
每组数据第一行有三个正整数?,?,?,分别表示矩形的大小和颜色
数。
接下来?行,每行?个非负整数,表示当前矩形的情况,0表示未染色,
1到?则表示该格子被染上了指定颜色,第一行第一个数为矩形的左上角,
第?行第?个数为矩形的右下角。
【输出格式】
对每组数据输出一行,表示答案。
【样例输入】
3
1 2 2
第 6 页 共 10 页
Day2–BFS,搜索优化 2018 年 2 月 6 日 染色
1 1
2 2 4
0 0
0 0
2 6 10
1 2 3 4 5 6
0 0 0 0 0 0
【样例输出】
0
48
4096
【数据规模】
对于20%的数据,1 ≤ ?,? ≤ 3,1 ≤ ? ≤ 6。
对于另外20%的数据,未染色的格子不超过7个。
对于80%的数据,1 ≤ ?,? ≤ 6。
对于100%的数据,1 ≤ ? ≤ 30,1 ≤ ?,? ≤ 100,1 ≤ ? ≤ 10。
数据规模较大,请使用stdio.h中的scanf和printf函数进行输入输出。
第 7 页 共 10 页



思路:先把能涂的格子,能涂几种颜色求出,就变成了数学问题,把可能全部相乘除以2就AC了;


第四题:

营救行动
【问题描述】
公主被恶龙关在了一个? × ?的迷宫里,现在勇士想要去救她。
迷宫中每个格子是下列类型之一:
1、墙(字符#):不可通过。
2、普通空地(字符.):可直接通过。
3、蛇(字符S):当勇士到达这个格子时,他需要额外的1个单位时间
杀死蛇,之后该格子就变为普通空地,一个迷宫里最多5条蛇。
4、勇士起始点(字符K):该点与普通空地性质相同,是勇士初始所
在的位置。
5、钥匙(数字1-9):可直接通过,数字表示钥匙种类,要取得第?种钥
匙需要勇士拥有前? − 1种钥匙(特别地,第一种钥匙可以直接获得),一种
钥匙可能出现在多个地方,也可能一次都不出现,图中一共有?种钥匙。
6、公主所在点(字符T):可直接通过,如果勇士拥有了全部的?种钥
匙(特别地,若? = 0,则不需要任何钥匙),那么就可以把公主救出来。
勇士每次可以花1个单位时间从一个格子移到另一个与当前格子有公共
边的格子,途中不能超出边界,也不能撞墙,求勇士救出公主所需要的最
少时间,如果不可能,那么就输出字符串impossible
【输入格式】
多组数据,每组数据第一行两个非负整数?,?,接下来?行每行是一个
长度为?的字符串,描述整个迷宫。
第 8 页 共 10 页
Day2–BFS,搜索优化 2018 年 2 月 6 日 营救行动
输入以? = ? = 0结束,你不需要对该数据做任何处理。
【输出格式】
对每组数据输出一行,表示所求答案。
【样例输入】
3 1
K.S
##1
1#T
3 1
K#T
.S#
1#.
3 2
K#T
.S.
21.
0 0
第 9 页 共 10 页
Day2–BFS,搜索优化 2018 年 2 月 6 日 营救行动
【样例输出】
5
impossible
8
【数据规模】
第1,2,6,7,8个测试点满足:? = 0。
第1,2,3,4,5个测试点满足:没有蛇。
对于所有数据均有:1 ≤ ? ≤ 20,1 ≤ ? ≤ 50,0 ≤ ? ≤ 9,数据中必定
有K和T字符,蛇的数量不超过5条。
【出题人的关怀】
我们可以利用整数的二进制位来记录一个集合中各个元素的存在情况,
比如,用一个整数的从低到高第?位表示第?号元素的存在情况,存在则该
位上为1,不存在则为0。
对第?个元素进行操作时,先将1左移到从低到高第?位上,即(1 << ?),
之后若要在集合中添加第?个元素,令整数? = ?|(1 << ?),若要删除
第?个元素,令整数? = ?&(∼ (1 << ?)),判断第?个元素是否存在,则
用((?&(1 << ?))! = 0)。
第 10 页 共 10 页

就是普通的BFS题多了个捡钥匙的过程,把这个过程这用BFS以此,把它也当成一题,并判断,就是最短的时间了;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值