题解
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;
}
标签:cnt,Rook,ll,矩阵,How,Does,放置,ans,第一列
From: https://www.cnblogs.com/pure4knowledge/p/18150331