20分代码求助(滚动数组优化还没加,先不考虑,样例错了一个)
查看原帖
20分代码求助(滚动数组优化还没加,先不考虑,样例错了一个)
386984
kd_homelander915楼主2023/3/26 11:41
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
const ll mod=1000000007;
ll x,y,f[105][75][75],ans;
template <typename T>
void in(T &x){
	char c=getchar();
	bool f=true;
	for(;c<'0'||c>'9';c=getchar())
		if(c=='-')
		    f=false;
	for(x=0;c>='0'&&c<='9';c=getchar())
		x=(x<<1)+(x<<3)+(c^48);
	if(!f)
	    x=-x;
}
void putf(ll x){
	if(x<0)
	    x=-x,putchar('-');
	if(x>9)
	    putf(x/10);
	putchar((x%10)^48);
}
ll bit(ll a,ll xx){
	if(xx<1)
	    return 0;
	return a&(1<<(xx-1));
}
ll check(ll a,ll xxx){
	if(xxx<1)
	    return 0;
	if(a&(1<<(xxx-1)))
	    return 1;
	return 0;
}
ll at(ll now){
	ll c=0;
	for(ll k=1;bit(-1,k)<=now;k++){
		if(!check(now,k))
		    continue;
		if(!check(now,k-1))
		    c|=bit(-1,k-2);
		if(!check(now,k+1))
		    c|=bit(-1,k+2); 
	}
	return c;
}
ll at_3(ll nowa,ll nowb){
	ll c=0;
	for(ll k=1;bit(-1,k)<=nowa;k++){
		if(!check(nowa,k))
		    continue;
		if(!check(nowb,k)){
			c|=bit(-1,k-1);
			c|=bit(-1,k+1);
		}
	}
}
int main(){
    in(x);
    in(y);
    for(ll i=0;i<(1<<y);i++)
        f[1][i][0]=1;
    for(ll i=0;i<(1<<y);i++)
        for(ll j=0;j<(1<<y);j++){
        	if((at(i)&j)||(at(j)&i))
        	    continue;
        	f[2][j][i]=(f[1][i][0]+f[2][j][i])%mod;
		}
	for(ll i=3;i<=x;i++)
	    for(ll j=0;j<(1<<y);j++)
		    for(ll l=0;l<(1<<y);l++){
		    	if((at(j)&l)||(at(l)&j))
		    	    continue;
		    	for(ll m=0;m<(1<<y);m++){
		    		if((at(l)&m)||(at(m)&l)||(at_3(j,l)&m)||(at_3(m,l)&j))
		    		    continue;
		    		f[i][j][l]=(f[i][j][l]+f[i-1][l][m])%mod;
				}
			}
	for(ll i=0;i<(1<<y);i++)
	    for(ll j=0;j<(1<<y);j++){
	        if((at(i)&j)||(at(j)&i))
	            continue;
	        ans=(ans+f[x][i][j])%mod;
	    }
	putf(ans);
	return 0;
}
2023/3/26 11:41
加载中...