A - Abstract Painting 赛后题解

传送门
A - Abstract Painting

题意

本题主要是定义一种格式,1X1正方体的四条边有两个不同颜色组成,每个颜色两条边,问nXm的矩形有多少种情况(共有三种颜色)。、
推理一下规律,对于1X1的小正方形,共有四条边,选择两种颜色是C(2,3),放到对应位置是有三种情况,上左,上右,上下 颜色相同,是三种排法,然后选出的两种颜色各有两种排法,最后答案是3X3X2=18;
那么对于1x2的小正方形,在一格小正方形已经确定了18种情况的基础上,只需要确定剩下的那个小正方形有多少情况,相乘即可,则,因为一条边相邻,则对于第二个正方形来说,有一条边已知,则剩下的三条边有多少种情况呢?先看颜色,还有两种选择,同色边的选择有三种方案,即六种情况,则乘上6即可,那么对于1x3的小格子,对于前两个确认的情况下,再乘6即可。
那么怎么推理2X2的情况呢,我们发现先推理完三个相连的以后是18x6x6
对于第四个,他的两条边都已经被限制了,那么,对于两条边被限制的情况,分两种情况,一种是两条边颜色相同,那剩下两条边是颜色相同,颜色有2 种情况,则为1x2;第二种情况是两条被限制的边颜色不同,那么便不可以再自己选颜色了,那么对位置有两种情况,也是1x2 那么无论什么情况都是2种,那么2x2 的表格是18x6x6x2,对于任何一个图像,都可以用这种推理方式退出答案。
代码实现就很简单了,如下;

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
int arr[30][3000];
void solve(){
    int n,a,b;
    ll ans=0;
    cin>>n;
    while(n--){
        cin>>a>>b;
        memset(arr,0,sizeof(arr));
        ans=1;
        for(int i=1;i<=a;i++){
            for(int j=1;j<=b;j++){
                if(i==1&&j==1)ans*=18;
                else if(i==1||j==1)ans*=6;
                else ans*=2;   
                ans%=1000000000+7;
            }
        }
        cout<<ans<<endl;
    }
}
int main()
{
	solve();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值