CODE FESTIVAL 2017 qual A C Palindromic Matrix(补题)
彩笔看到题目后,除了懵逼,没有啥反应了,唯一想的就是 这是不是dp啊?看了题解才发现,原来是这样啊。
画几个矩阵看看就能看出来规律。
思路:先假设这是个M * N的矩阵
- 如果M和N都是偶数,则每个出现的字母的个数都必须是偶数个,如果有某个字母出现奇数个的话,肯定不会对称,因为M和N都是偶数,所以每个字母肯定出现次数是4的倍数。假设右上角是字母a,则另外三个角肯定也是a,所以至少4个,里面的字母也是这样。
- 如果M和N一个奇数,一个偶数,则字母出现的次数,是2的倍数或者4的倍数。假设矩阵高度为奇数,宽度为偶数,则除了中间的那一行只是左右对称的之外,其余行的字母都是要保证左右对称和上下对称。都要至少4个,中间那一行左右对称,至少两个。
- 如果M和N都是奇数,则除了中间行和中间列之外,都要保证上下左右对称,中间行保证左右对称,中间列上下对称,最后中间再剩下一个字母。这就是要求,去掉中间那个字母,构造出来周围的那些位置且保证对称后,最后要再留一个字母放中间,哪个字母就无所谓了。
然后就是看输入的字母矩阵能否构成上述矩阵。
官方题解有过程。
#include <bits/stdc++.h>
using namespace std;
int rec[26];
int main()
{
int H,W;
scanf("%d %d",&H,&W);
int two = 0,four = 0,one = 0;
for(int i = 0; i < H/2; ++i)
for(int j = 0; j < W/2; ++j)
++four;
if(H&1 && W&1)
two = two + H/2 + W/2;
else if(H&1)
two += W/2;
else if(W&1)
two += H/2;
if(H&1 && W&1)
one = 1;
char ch;
for(int i = 0; i < H; ++i)
{
for(int j = 0; j < W; ++j)
{
scanf(" %c",&ch);
rec[ch-'a']++;
}
}
for(int i = 0; i < 26; ++i)
{
while(rec[i] >= 4 && four > 0)
{
rec[i] -= 4;
four--;
}
}
if(four != 0)
{
printf("No\n");
return 0;
}
for(int i = 0; i < 26; ++i)
{
while(rec[i] >= 2 && two > 0)
{
rec[i] -= 2;
two--;
}
}
if(two != 0)
{
printf("No\n");
return 0;
}
int sum = accumulate(rec,rec+26,0);
if(H&1 && W&1 && sum == 1)
printf("Yes\n");
else if(H&1 && W&1 && sum != 1)
printf("No\n");
else if(sum == 0)
printf("Yes\n");
else
printf("No\n");
return 0;
}
CODE FESTIVAL 2017 qual A C Palindromic Matrix(补题)的更多相关文章
- [Code Festival 2017 qual A] C: Palindromic Matrix
题意 给出一个小写字母组成的字符矩阵,问能否通过重排其中的字符使得每行每列都是回文串. 分析 简化版:给出一个字符串,问能否通过重排其中的字符使得它是回文串.那么如果字符串长度为偶数,就需要a到z的个 ...
- CODE FESTIVAL 2017 qual A B fLIP(补题)
平时没见过这样的题目,看到后很懵逼.没想到. 思路:按下按钮的顺序并不影响结果,一个按钮要么按一次,要么不按,按多了也没用,比如:按3次和按1次没啥区别. 假设这是个M * N的矩阵,我们已经按下了k ...
- CODE FESTIVAL 2017 qual B B - Problem Set【水题,stl map】
CODE FESTIVAL 2017 qual B B - Problem Set 确实水题,但当时没想到map,用sort后逐个比较解决的,感觉麻烦些,虽然效率高很多.map确实好写点. 用map: ...
- CODE FESTIVAL 2017 qual B C - 3 Steps【二分图】
CODE FESTIVAL 2017 qual B C - 3 Steps 题意:给定一个n个结点m条边的无向图,若两点间走三步可以到,那么两点间可以直接连一条边,已经有边的不能连,问一共最多能连多少 ...
- 【AtCoder】CODE FESTIVAL 2017 qual A
A - Snuke's favorite YAKINIKU -- #include <bits/stdc++.h> #define fi first #define se second # ...
- CODE FESTIVAL 2017 qual A 题解
补一发A的题解. A - Snuke's favorite YAKINIKU 题意: 输入字符串S,如果以YAKI开头输出Yes,否则输出No. #include<bits/stdc++.h&g ...
- CODE FESTIVAL 2017 qual A--C - Palindromic Matrix(模拟所有情况,注意细节)
个人心得:其实本来这题是有规律的不过当时已经将整个模拟过程都构思出来了,就打算试试,将每个字符和总和用优先队列 装起来,然后枚举每个点,同时进行位置标志,此时需要多少个点的时候拿出最大的和出来,若不满 ...
- CODE FESTIVAL 2017 qual B
昨晚因为有点事就去忙了,没打后悔啊 A - XXFESTIVAL Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem ...
- 【题解】Popping Balls AtCoder Code Festival 2017 qual B E 组合计数
蒟蒻__stdcall终于更新博客辣~ 一下午+一晚上=一道计数题QAQ 为什么计数题都这么玄学啊QAQ Prelude 题目链接:这里是传送门= ̄ω ̄= 下面我将分几个步骤讲一下这个题的做法,大家不 ...
随机推荐
- 洛谷P1314 [NOIP2011提高组Day2T2] 聪明的质监员
P1314 聪明的质监员 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 n 个矿石,从 1到n 逐一编号,每个矿石都有自己的重量 wi 以及价值vi .检验矿产的流程是: ...
- tp5.1 本地正常, 线上route.php不起作用的问题
由于本项目 的.htaccess文件是放在根目录的, 上传没有覆盖,重新编辑 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multi ...
- MongoDB 定位 oplog 必须全表扫描吗?
MongoDB oplog (类似于 MySQL binlog) 记录数据库的所有修改操作,除了用于主备同步:oplog 还能玩出很多花样,比如 全量备份 + 增量备份所有的 oplog,就能实现 M ...
- SEO优化步骤
SEO技术并不是简单的几个建议,而是一项需要足够耐心和细致的脑力劳动.大体上,SEO优化主要分为8小步: 1.关键词分析(也叫关键词定位) 这是进行SEO优化最重要的一环,关键词分析包括:关键词关注量 ...
- 有意思的DP(CF360B Levko and Array)
刚才面试了一个蛮有意思的DP题目,脑子断片,没写出来,不过早上状态还是蛮好的 一个长度为n的序列最多改变k次,使相邻两数之差绝对值的最大值最小 三维的dp我先尝试写一下 Codeforces 360B ...
- jsp里更新Clob类型字段数据
ResultSet rs = null; Connection conn = new dbconn().getconnect(); Statement stmt = null; int news=0; ...
- 怎么用PHP+sqlite3验证登录用户名和密码
Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象 ...
- mysql更改密码
mysql command line client输入密码以后闪退问题的解决: 网上搜到的解决办法(my.ini文件之类的修改对我都没有起到作用).. 所以觉得是自己密码的问题,因为许久不用这个软件了 ...
- SQL知识总结(1)
什么是数据库: sql组成: DDL:数据定义语句,有CREATE/DROP等: DML:数据操作语句,有DELETE/UPDATE/INSERT/INSERT等; DQL:数据查询语句,有SELEC ...
- mac os 使用记录
折腾过一台黑苹果,配置很菜,奔腾G3260和B150M-D2V,具体EFI和配置详见repo Hackintosh 首先要解决的就是写代码问题,mac进行acm(C/C++)编程 VS code天下第 ...