C. How Does the Rook Move?

原题链接

题解

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

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 @ 2024-04-22 11:39  纯粹的  阅读(27)  评论(0编辑  收藏  举报