sg博弈

这种题型最近碰到的有点多。。先记录下

这个是一些区间 轮流选。当前选的不能和之前的区间有交集。。
感觉就是一个区间dp 。。递归的赶脚。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll __int128_t
#define ar array<int, 2>
#define arr array<int, 3>
int  n, m, k, inf = 1LL << 61, mod = 998244353;// 1e9+7;
const int N = 5e5 + 50;
int f[101][101], a[101], b[101];
int dfs(int l, int r) {
	if (l == r)return 0;
	if (~f[l][r])return f[l][r];
	set<int>st;
	for (int i = 1; i <= n; ++i)
		if (l <= a[i] && b[i] <= r) {
			st.insert(dfs(l, a[i])^dfs(b[i], r));
		}
	int mex = 0;
	while (st.count(mex))++mex;
	return f[l][r] = mex;
};
void solve() {
	cin >> n;
	for (int i = 1; i <= n; ++i)
		cin >> a[i] >> b[i];
	memset(f, -1, sizeof f);
	cout << (dfs(0, 100)  ? "Alice" : "Bob") << '\n';
};


//一人一世界。。
//如果我来选 肯定选那种 交集多的那些中间区间。。无脑选。。

// https://drken1215.hatenablog.com/entry/2021/06/19/224100






signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout << fixed << setprecision(15);
#ifdef DEBUG
	freopen("../1.in", "r", stdin);
#endif
	//init_f();
	//init();
	//expr();
	int T; cin >> T; while (T--)
		solve();
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值