AcWing 1319. 移棋子游戏

sg函数是一张有向无环图
尼姆博弈对每一张图sg(值)进行游戏
就是加强版的集合尼姆博弈(集合尼姆博弈中拓展是根据集合可能的新状态),这里是回归本质,sg操作是对每个状态拓展出边,并通过出边sg值集合进行mex操作,来求当前点的sg值

vector<int>G[2005];
int fg[2005];
int n, m, k, x,y;
int sg(int x)
{
	if (fg[x] != -1)return fg[x];
	unordered_set<int> s;
	for(auto i:G[x])
		s.insert(sg(i));
	for (int i = 0;;++i)//mex
		if (!s.count(i))return fg[x] = i;
}
int main()
{		
	cin >> n >> m >> k;
	f(i, 1, m)
	{
		scanf("%d%d", &x, &y);
		G[x].emplace_back(y);
	}
	int ans = 0;
	memset(fg, -1, sizeof fg);
	f(i, 1, k)
	{
		scanf("%d", &x);
		ans ^= sg(x);//每个棋子位置的sg
		//debug(sg(x));
	}
	if (ans == 0)puts("lose");
	else puts("win");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
扩充游戏规则如下: 4. 棋子类型和作用:每个棋子代表一个特定的对象或者角色,它们拥有不同的能力和作用。例如,有些棋子可以动到相邻的空格,有些棋子可以攻击其他棋子,有些棋子可以生成新的棋子等等。每个棋子的作用和规则可以根据游戏的主题和设计进行自定义。 5. 互动效果:当两个相邻的棋子代表的对象进行互动时,可能会触发一些效果。这些效果可以是抵消、吃掉、合并或者生成新的棋子。例如,当两个相同类型的棋子相邻时,它们可能会合并成一个更强大的棋子;当两个不同类型的棋子相邻时,一个棋子可能会吃掉另一个棋子并占据其位置。 6. 扩张机制:在游戏进行过程中,当某个棋子触发特定条件时,它可以生成新的棋子并将其放置在相邻的空格上。这样可以使得该方在棋盘上扩张自己的棋子数量。 7. 胜利条件:游戏进行100轮后,棋盘上棋子数量最多的一方为胜者。如果在100轮结束时有多个玩家棋子数量相同,可以考虑其他评判标准,例如棋盘上总价值最高的一方或者最后一轮中增加的棋子数量最多的一方。 8. 特殊事件和道具:游戏中可以加入一些特殊事件和道具,用于增加游戏的策略性和变化性。例如,随机事件可以改变棋盘上的某些格子状态,道具可以提供临时的特殊能力或者影响其他棋子的行动等等。 9. 策略与决策:玩家在每一轮中需要根据当前局势和对手的棋子情况做出决策。这包括选择动哪些棋子、是否进行互动、何时生成新的棋子等等。策略性的思考和决策将成为游戏胜利的关键。 10. 多人模式:除了单人模式外,还可以加入多人对战模式,让多个玩家同时参与游戏。玩家可以选择与其他玩家合作或者竞争,通过互相攻击、合作或者交换棋子来影响对手和改变局势。 以上是一些扩充的游戏规则,你可以根据自己的需求和创意进行修改和拓展。记得在设计游戏规则时,要考虑平衡性、趣味性和可玩性,以提供给玩家一个有挑战性和多样性的游戏体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值