P1329 数列
#1~#5AC,#6~#8WA,#9~#10TLE
代码如下:
#include<iostream>
#define in long long
using namespace std;
in tail,n,s;
in qhx(in b,in d){
return (b+b+d-1)*d/2;
}
in qhn(in b,in d){
return (b+b-d+1)*d/2;
}
in a[105],c[105][105];
void dfs(in sum,in d){//sum表示和,d表示循环位数
//cout<<d<<" "<<sum<<endl;
if((qhx(a[d-1]+1,s-d+1)+sum<s)||(qhn(a[d-1]+1,s-d+1)+sum>s))return;
if(d==n){
if(sum+a[d-1]+1==s){
tail++;
if(tail<=100){
for(int i=1;i<n;i++)c[tail][i]=a[i];
c[tail][n]=a[n-1]+1;
}
}else if(sum+a[d-1]-1==s){
tail++;
if(tail<=100){
for(int i=1;i<n;i++)c[tail][i]=a[i];
c[tail][n]=a[n-1]-1;
}
}
return;
}
a[d]=a[d-1]+1;
dfs(sum+a[d],d+1);
a[d]=a[d-1]-1;
dfs(sum+a[d],d+1);
}
int main(){
cin>>n>>s;
//if(((s-1)%2)%2==n%2){
// cout<<"0";
// return 0;
//}
dfs(0,2);
cout<<tail<<endl;
for(in i=1;i<=((tail<=100)?tail:100);i++){
for(in j=1;j<=n;j++)cout<<c[i][j]<<" ";
cout<<endl;
}
return 0;
}
是思路错了?还是……
大佬求教!!!