求助
查看原帖
求助
492010
Algae_qwq楼主2022/11/29 20:56

卡在80分过不去

#include<bits/stdc++.h>
using namespace std;
int n,i,na,nb,s;
bool f[505][505];
namespace IO{
	char ibuf[(1<<20)+1],*iS,*iT;
	#if ONLINE_JUDGE
	#define gh() (iS==iT?iT=(iS=ibuf)+fread(ibuf,1,(1<<20)+1,stdin),(iS==iT?EOF:*iS++):*iS++)
 	#else
	#define gh() getchar()
	#endif
	#define reg register
	inline long long read(){
		reg char ch=gh();
		reg long long x=0;
		reg char t=0;
		while(ch<'0'||ch>'9')   t|=ch=='-',ch=gh();
		while(ch>='0'&&ch<='9') x=x*10+(ch^48),ch=gh();
		return t?-x:x;
	}
}
using IO::read;
void write(int x) {
	if(x<0){
		putchar('-');
		write(-x);
		return;
	}
	if(x>=10)write(x/10);
	putchar(x%10+'0');
}
void dfs(int k)
{
   int i,j,a=0;
   if(k>n){
      for(i=n;i>1;i--)
         for(j=1;j<=i;j++)
            if(f[i][j]==f[i][j+1])f[i-1][j]=0;
            else f[i-1][j]=1;
      for(i=1;i<=n&&a<=na;i++)
         for(j=1;j<=i;j++)
            a+=(!f[i][j]);
      if(a==na)s++;
      return;
   }
   f[n][k]=1;
   dfs(k+1);
   f[n][k]=0;
   dfs(k+1);
}
int main()
{
   na=read(),nb=read();
   n=na+nb;
   while(n){
      n-=i;
      i++;
   }
   n=i-1;
   dfs(1);
   write(s);
   return 0;
}
2022/11/29 20:56
加载中...