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 题目链接:这里是传送门= ̄ω ̄= 下面我将分几个步骤讲一下这个题的做法,大家不 ... 
随机推荐
- UE4物理模块(三)---碰撞查询(上)
			在前一文中介绍了如何在UE4中创建简单碰撞或者直接使用其mesh表示的复杂碰撞: Jerry:UE4物理模块(二)---建立物体碰撞zhuanlan.zhihu.com 那么在拿到碰撞之后,就可以进 ... 
- Calendar to julian date format
			1.JULIAN DATE 定义 2.示例: 定义枚举: public enum JulianDateType { /// <summary> /// J ... 
- 【水滴石穿】LoginScreen_Firabase_ReactNativeApp_Redux
			先看效果 分析代码我们会发现,它使用了firebase 关于登陆部分应该是实时数据库,应该是他们后端校验的 //app.js //这里使用了实时数据库 import React, { Componen ... 
- SAS-一些有用的语句
			SAS-一些有用的语句 今天本想继续介绍 summary过程的,但是发现别人整理的比我更好,于是周末再更,好好整理一下描述性统计分析及评分卡建模,今天给大家介绍一些sas有用的语句吧. 1.如果在同一 ... 
- Mac查看Python安装路径和版本
			目录 #查看当前所有Python版本路径 appledeMBP:~ apple$ which python2.7 /usr/local/bin/python2.7 appledeMBP:~ apple ... 
- 寒哥带你深入了解下Swift中的Value Type
			http://www.cocoachina.com/swift/20150923/13539.html 关于开发到底使用ValueType 值类型还是Reference Type 引用类型,关于这个, ... 
- 连接池c3p0
			连接池c3p0 C3P0:hibernate和spring使用,有自动回收空闲连接的功能. 使用步骤: 1.导入jar包(c3p0-0.9.1.2.jar) 2.使用api a.硬编码(不推荐) ne ... 
- Qt qmake报错(TypeError: Property 'asciify' of object Core::Internal::UtilsJsExtension)
			问题如题. 解决方案: 第一种 用下管理员权限来打开qt creator,再创建工程.有可能是没权限创建出源码工程目录 第二种 打开qt左边的项目上,可以看到这个项目的编译路径,修改成绝对路径,或者设 ... 
- eclipse Some projects cannot be imported because they already exist in the workspace
			archive file 档案文件 删除对应的文件即可 
- QT_OPENGL-------- 1.  WINDOW
			opengl学习第一步,首先来实现一个显示窗口. 1.首先要下载配置glfw,我在前面的文章中也提到过,具体作用可以另行百度.配置出现无法引用可参考ubuntu 使用glfw.h 出现函数无法调用. ... 
