被子

被子(quilt)

10.26

来自atcoder code festival 2017 qual A的C题.主要和字母数目奇偶性相关,选手可以自行去atcoder.jp查看题解(逃
为了尽量卡低错误做法的分数,极限数据进行了捆绑.
严谨(划掉)的题解:
算法1:
直接枚举所有的重新排列方式并检验,可以通过第1,2个测试点.
算法2:
对于n=1的情况,分m为奇为偶两种情况处理.m为偶时只需所有字母为偶数个,m为奇数时需要恰好有一种字母为奇数个.可以通过第3,4个测试点.
算法3:
对于n=2的情况,回文矩阵是两个相同的回文串叠起来.首先判断是否所有字母数目均为偶数,如果不是则无解;如果是,那么两个相同的回文串各占有全部字符的一半,把每个字母的数目都除以2,然后同算法2.可以通过第5个测试点.
算法4:
对于n,m均为偶数的情况,只需要每种字母的数目都是4的倍数.
算法5(标算):
假设行数为n,列数为m.
1.n和m均为偶数(即算法4):
最简单的情况,只需要所有字母的个数都是4的倍数
2.n为偶数,m为奇数:(n为奇数m为偶数的情况相同)
那么在刨掉一个长度为n的回文串之后所有字母的个数都是4的倍数.
于是所有字母的个数还都得是偶数,我们不妨先把所有字母的个数都除以2…
那么除以2之后要有(m-1)n/2个字母可以分成两两一组,还有n/2个字母可以分成每个字母单独一组…
于是数一数除以2之后有多少个字母是奇数个,如果这个数目大于n/2那么没戏,如果这个数目和n/2的奇偶性不同也没戏,否则一定行.
3.n为奇数,m为奇数
首先必然会有一种字母是奇数个,其他字母是偶数个,不满足这个条件就GG了.
如果满足这个条件,为了简化问题再把所有字母个数除以2…
那么还要有(m-1)(n-1)/2个字母可以两两一组,(n-1)/2+(m-1)/2个字母可以每个字母单独一组,然后的判断和2相同.

思路:
简单特判题。。。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define LL long long
#define N 210
using namespace std;

int n, m;
int cnt[30];
char s[210]; 

int main(){
    freopen ("quilt.in", "r", stdin);
    freopen ("quilt.out", "w", stdout);
    int T; scanf("%d", &T);
    while ( T-- ){
        scanf("%d%d", &n, &m);
        memset(cnt, 0, sizeof(cnt));
        for(int i=1; i<=n; i++){
            scanf("%s", s+1);
            for(int j=1; j<=m; j++){
                cnt[s[j] - 'a']++;
            }
        }
        int a=0, b=0, c=0;
        for(int i=0; i<26; i++){
            while (cnt[i] >= 4){
                cnt[i] -= 4;
                a++;
            }
            if (cnt[i] >= 2){
                cnt[i] -= 2;
                b++;
            }
            if (cnt[i]){
                c++;
            }
        }
        if( c > 1 || c == 1 && !(n & 1) || c == 1 && !(m & 1)) { printf("No\n"); continue;}
        if(a < (n / 2) * (m / 2)) { printf("No\n"); continue;}
        printf("Yes\n");
    }
}
### 回答1: 在Python中,如果一个变量或函数在父类中被定义为私有(以双下划线开头),那么它在子类中将无法被访问。但是,如果将变量或函数定义为受保护的(以单下划线开头),则它将在子类中继承并且可以被访问。 以下是一个简单的例子,展示了一个基类中定义了一个受保护的变量和函数,而子类中可以继承和访问这些变量和函数: ```python class Parent: _protected_var = "I am a protected variable in Parent class" def __init__(self): self._protected_function() def _protected_function(self): print("I am a protected function in Parent class") class Child(Parent): def __init__(self): super().__init__() print(self._protected_var) self._protected_function() c = Child() ``` 输出: ``` I am a protected function in Parent class I am a protected variable in Parent class I am a protected function in Parent class ``` 可以看到,子类`Child`可以继承和访问基类`Parent`中定义的受保护变量和函数。 ### 回答2: "scope test 被子包继承"这句话是一个关于包的继承范围测试的问题。 在Java中,一个包(package)可以被另一个包所继承。被继承的包称为父包,继承的包称为子包。包的继承可以提供代码的共享和重用。 当一个子包继承一个父包时,子包可以访问父包中的所有非私有类、接口和成员。这意味着在子包中,可以直接使用父包的类、接口和成员而不需要引入(import)。 然而,需要注意的是,子包不能访问父包中声明为私有(private)的类、接口和成员。私有成员只能在其所在的包中直接访问。只有公共(public)和受保护(protected)成员可以被继承到子包中。 另外,子包继承父包的同时也继承了父包中的访问修饰符。如果一个类、接口或成员在父包中被声明为公共,那么在子包中也可以对其进行公共访问。如果在父包中被声明为受保护,那么在子包中可以进行受保护访问。 需要注意的是,子包只能继承直接的父包,而不能继承间接的父包。如果子包想要使用间接的父包中的类或接口,必须在子包中引入(import)该类或接口。 综上所述,当"scope test 被子包继承"时,子包将继承父包中的公共和受保护的类、接口和成员,并且可以直接使用它们。同时,子包也继承了父包中的访问修饰符。对于私有的成员,子包将无法直接访问。 ### 回答3: 当一个子包继承了一个scope test时,它将继承该scope test的所有成员和方法。这意味着子包可以直接访问和使用该scope test中的所有变量、属性和方法,无需重新声明或定义它们。 在继承后,子包可以通过调用和使用继承的成员来扩展其功能。例如,如果scope test中有一个公共变量,子包可以直接访问和修改该变量的值。同样,如果scope test中有一个公共方法,子包可以直接调用并使用该方法来执行特定的操作。 继承还使得子包能够重写和覆盖scope test中的方法。如果子包需要对某个方法进行定制或修改,它可以在自己的代码中重新实现该方法,并且子包的代码将会优先执行,而不是调用继承的方法。这样,子包可以根据自己的需求进行适应和定制,而无需改变或影响其他继承了该scope test的包或程序。 总的来说,当一个子包继承了一个scope test,它可以直接使用和扩展该scope test中的所有成员和方法。这种继承关系使得子包能够灵活地定制和扩展自己的功能,同时保留并重用scope test中已有的代码和逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值