[蓝桥双周赛]铺地砖

题目描述

小蓝家要装修了,小蓝爸爸买来了很多块(你可以理解为数量无限)2×3规格的地砖,小蓝家的地板是n × m规格的,小蓝想问你,能否用这些2×3的地砖铺满地板。

铺满地板:对于地板的每个区域,都有且只有一块地砖覆盖,地砖可以旋转,但不能切割。

例如:对于7×6的地板,一种铺地板方式是:

当然,也存在其他别的铺法。

小蓝家是个多层小别墅,每一层的规格不一样,所以他会多次询问你不同规格的地板。

输入格式

第一行输入一个整数T,代表询问数量。

接下来T行,每行两个正整数ni, mi,代表小蓝询问的地板规格。

输出格式

对于每次询问,如果2×3的地砖可以铺满地板,输出Yes,否则输No。

输入样例

在这里给出一组输入。例如:

4
7 6
2 2
12 8
1 12

输出样例

在这里给出相应的输出。例如:

Yes
No
Yes
No

这道题目考察了数论,如果不会的话写暴力如果数据点比较强很有可能过不了

刚开始写了个搜索判断能不能由2,3组成,但是不知道为什么搜索过不了qwq

数论结论是对于两个互质的数a,b,存在的最大的不能由这两个数组合出来的整数是

a*b-a-b

 对于地板的两条边来说,只要其的边长可以由a,b自由组合出来,那么其就可能存在满足条件的摆法。

最终答案就是上面的条件满足外额外满足地板面积是地砖面积的整数倍即可

#include <bits/stdc++.h>

using namespace std;

typedef long long int ll;
#define endl "\n"
#define maxLine 110
#define long long int ll;

ll splitA=2;
ll splitB=3;

ll calc(ll a,ll b){
    // 计算最大的不能表示的数字
    return a*b-a-b;
}
int main() {
    int n;
    cin>>n;
    int a,b;
    int nums=calc(splitA,splitB);
    for(int i=1; i<=n; i++){
        cin>>a>>b;
        if (((a*b)%(splitA*splitB)==0) && (a>nums) && (b>nums) ){
            cout<<"Yes";
        }
        else {
            cout<<"No";
        }
        cout<<endl;
    }
    return 0;
}

这里面注意,取模符号(%)和乘除符号具有相同的优先级,所以在除法运算的结果取模的时候注意使用括号!

加油吧,算法真的垃圾的要死

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSU_曾是此间年少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值