C. How Does the Rook Move?

原题链接

题解

1.没有棋下也算一种情况!!!!!!!!!
2.前k次放置,如果放在对角线上,会把原先n阶矩阵分解成n-1阶矩阵,如果没放在对角线上,会分割成n-2阶矩阵
3.不管如何放置,到最后第一列总有且仅有一颗棋子,第一列的第一行只能放白棋,第2到第n行可以放白棋或黑棋,所以第一列的放置有 2n1 种情况

code

#include<bits/stdc++.h>
#define ll long long
const ll mod=1e9+7;
using namespace std;
ll t2[300005]={0};
ll ans[300005]={0};
int main()
{
    ans[0]=1;
    for(ll i=1;i<=300002;i++)
    {
        t2[i]=i*2LL;
        t2[i]%=mod;
    }
    ans[1]=1;
    ans[2]=3;
    for(ll i=3;i<=300002;i++)
    {
        ans[i]+=ans[i-1];
        ans[i]%=mod;
        ans[i]+=ans[i-2]%mod*t2[i-1]%mod;
        ans[i]%=mod;
    }


    ll t;
    cin>>t;
    while(t--)
    {
        ll n,k;
        cin>>n>>k;
        ll cnt=0;
        for(ll i=1;i<=k;i++)
        {
            ll x,y;
            cin>>x>>y;
            if(x!=y) cnt+=2;
            else cnt++;
        }
        cout<<ans[n-cnt]%mod<<endl;
    }
    return 0;
}

posted @   纯粹的  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示