绿题调不过了,悬关
查看原帖
绿题调不过了,悬关
326254
LonginusMonkey楼主2023/10/5 18:30
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a, b, k;
int solve() {
	// k * k - k - 2*(a+b) = 0
	// k = (1 + sqrt(1+8*(a+b))) / 2;
	return (1+sqrt(1+8*(a+b)))/2;
}
bool bl = 0;
int arr[210];
void check(int index, int fa) {
	if(index == 0) {
		cout << fa <<endl;
		if(fa == a) {
			bl = 1;
		}
		return;
	}
	for(int i=1; i<=index; ++i) {
		if(arr[i] != arr[i+1]) {
			arr[i] = 0;
		} else {
			arr[i] = 1;
		}
		if(arr[i] == 1) {
			fa++;
		}
	}
	check(index-1, fa);
}
signed main() {
	cin >> a >> b;
	k = solve();
	int ans = 0;
	for(int i=0; i<(1<<k); ++i) {
		bl = 0;
		int a = 0;
		for(int j=1; j<=k; ++j) {
			if(((i>>(j-1)) & 1) == 1) {
				arr[k-j+1] = 1;
				a++;
			} else {
				arr[k-j+1] = 0;
			}
		}
		check(k-1, a);
		if(bl) {
			ans++;
		}
	}
	cout << ans;
	return 0;
}
2023/10/5 18:30
加载中...