UPCOJ-5344 - 被子 - 瞎搞
题目:
题目描述
作为一只明媚的兔子,需要学会叠被子…
被子是方形的,上面有很多小写字母.可以认为被子是一个n*m的字符矩阵
被子能够被叠起来,当且仅当每一行,每一列都是回文串.
兔子可以把同一条被子上任意两个位置的字母交换位置,而且兔子不嫌麻烦,为了把被子叠起来它愿意交换任意多次.但是兔子不能交换两条不同的被子之间的字母.
现在兔子翻箱倒柜找出来了很多被子,请你帮兔子判断每条被子能否被叠起来.
输入
第一行一个Q,表示被子的条数
接下来描述Q条被子.
描述每条被子时,第一行输入两个整数n,m表示由n行m列组成
接下来n行每行一个长度为m的字符串.字符串中只含小写字母.
输出
Q行,依次输出对每条被子的判断结果.如果可以叠起来,输出一行“Yes”(不包括引号),如果叠不起来,输出一行“No”(不包括引号).
样例输入
53 4
aabb
aabb
aacc2 2
aa
bb5 1
t
w
e
e
t2 5
abxba
abyba1 1
z
样例输出
Yes
No
Yes
No
Yes
提示
Q<=10,n,m<=200Q
思路:
发现对于两个都是偶数的来说,因为每行每列都要对称,那么每个字符出现的次数都应该是4的倍数。
对于一奇一偶的情况,只有奇中间那一行可以是%4 余 2的。因为中间那一串自己成为一个回文串即可。当然出现奇数次数的不行。同时余2的个数必须要<列/2(如果列为偶的话,其他反之)。
对于两个都是奇数的情况,允许一个奇数出现,拿一个作为中间那一个。其他余2的次数不能超过n−1+m−12\frac{n - 1 + m - 1}{2}。
特判即可。
实现:
#include <cstdio>
#include <cstring>
int cnt[30], mod[4];
char s[207];
void init(int n, int m) {memset(cnt, 0, sizeof(cnt));memset(mod, 0, sizeof(mod));for (int i = 0; i < n; i++) {scanf("%s", s);for (int j = 0; j < m; j++) cnt[s[j] - 'a']++;}for (int i = 0; i < 26; i++) mod[cnt[i] % 4]++;
}
bool solve(int n, int m) {mod[1] += mod[3], mod[2] += mod[3];int tmp = (n & 1) + (m & 1);if (tmp == 0) return !(mod[1] || mod[2]);else if (tmp == 1) {if (mod[1]) return false;tmp = (n & 1) ? m / 2 : n / 2;return mod[2] <= tmp;} else {if (mod[1] != 1) return false;return mod[2] <= (n + m - 2) / 2;}
}
int main() {
// freopen("in.txt", "r", stdin);int _, n, m; scanf("%d", &_);while (_--) {scanf("%d%d", &n, &m);init(n, m);puts(solve(n, m) ? "Yes" : "No");}return 0;
}
UPCOJ-5344 - 被子 - 瞎搞相关推荐
- [JZOJ5281]钦点题解--瞎搞+链表
[JZOJ5281]钦点题解--瞎搞+链表 题目链接 于 暴 力 过 分析 第一眼: 模拟美滋滋?! 然后数据范围...不太对 naiive模拟30pts 然后你交换字符串指针60pts 然后发现可以 ...
- android重置系统,安卓手机越用越卡,恢复出厂设置真有用?别瞎搞,看完就明白了!...
安卓手机越用越卡,恢复出厂设置真有用?别瞎搞,看完就明白了! 现在手机的价格逐渐的开始上升,一部好一点的手机价格还是比较贵的,所以很多人想要节省更多的换机支出,都会想要购买到一款可以使用的比较久的手机 ...
- HDU5971【瞎搞】
题意:略(忙着准备文化课...明天期中考啊.... 思路: 正解就是染色,2-sat搞: AC代码(虽然是错误的...数据水(过踏马的也行啊,起码打脸他啊!) 4 3 1 0 1 2 2 3 3 4 ...
- HDU 5600(瞎搞)
第一场Bestcoder居然爆零..果然是too naive..小聪明全部直接输出"YES"过了pretest,结果被叉也是&%$% 找到规律传递下就好.后来看官方题解感觉 ...
- HDU 4923 Room and Moor(瞎搞题)
瞎搞题啊.找出1 1 0 0这样的序列,然后存起来,这样的情况下最好的选择是1的个数除以这段的总和. 然后从前向后扫一遍.变扫边进行合并.每次合并.合并的是他的前驱.这样到最后从t-1找出的那条链就是 ...
- 别再瞎搞数仓了!BAT内部大神:数据仓库不是谁都可以建的
在我没有进互联网之前,我一直以为数据仓库是所有企业进行数据资产管理的必备工作,但直到我去了很多家企业搞数据之后才发现,原来并不是所有的企业都适合做数据仓库,更不要说数据中台了. 很多企业现在做数据仓库 ...
- Wannafly交流赛1: C. 腰带图(瞎搞)
链接:https://www.nowcoder.com/acm/contest/69/C 来源:牛客网 题目描述 一个n个点m条边的无向图,它若满足以下性质,我们就称它为腰带图: 1.n为>=6 ...
- 我的瞎搞开发工具集以及对一些工具的比较
本文的目的是作为一个记录,不引战,同时为有同样瞎搞爱好者提供一个学习思路--尽量全部推荐和使用免费开源工具,减少版权纠纷,降低学习成本,大概算有用吧 我的技术栈: 实际上有很多并不是很熟,请酌情参考 ...
- 使用jsdelivr时不要瞎搞
8月15日jsdelivr在官网更新了使用条款.虽然不清楚具体更新了哪些内容,但是注意到这几个处被很多人忽略了.瞎搞很容易被jsdelivr阻断连接.以下是需要注意的这几个处. 4. Prohibit ...
- ubuntu--基础环境瞎搞集合
安装ubuntu系统后有很多东西需要自己瞎搞一下,这里把一些瞎搞的过程记录在这里,方便以后重新装系统后重新配置. 一.安装. 可以在windows下制作启动盘(软碟通),然后开机u盘启动即可安装,预留 ...
最新文章
- 借助可视化,最直观理解梯度,以及偏导数、方向导数和法向量等
- ThinkPHP简单的基础
- HTML 标签自定义属性
- 厌倦了SWT TABLE,何不试试KTABLE?
- VTK:网格之CellEdges
- 为Ubuntu安装FTP服务
- 【Redis学习】Redis管理命令总结
- 以容器为代表的云原生技术,正成为释放云价值最短路径
- SAP License:利润中心设计思路
- AD的备份与标准还原:深入浅出Active Directory系列(四)
- spring boot 教程(四) 统一异常处理
- javascript html注释,javascript html注释
- 计算机ps基础知识教案范文,ps基础教案
- 朴素贝叶斯之邮件分类
- from_tensor_slices
- office精英俱乐部_开放组织读书俱乐部:收回精英制
- mysql 复制frm_通过拷贝frm myd myi opt文件来实现mysql的备份和还原
- 华为+android+root权限获取root,[Android]如何获取华为手机的root权限
- 徐无忌MySQL笔记:MySQL数据库锁有几种?实现原理是什么?
- ipoo3可以用鸿蒙,真正全网通!iQOO 3支持双模六频5G,出国也能用
热门文章
- 部署点评Cat监控项目
- 【Linux CentOS系统】Matplotlib不显示Times New Roman
- 7-6 厘米换算英尺英寸 (15 分)
- 学计算机r7000和y7000哪个好,联想拯救者r7000p和y7000p哪个好-联想拯救者r7000p和y7000p评测对比...
- ZOOMIT的使用方法
- UVM糖果爱好者教程 - 31.provides_responses?
- 【字节前端青训营】跟着月影学JavaScript——前端代码优化三大原则之各司其职,夜间模式小案例
- cc2530:<3>ADC采集光照度案例
- Pytorch Tutorial 学习笔记(六)模型部署
- 360校招笔试题总结4