AT1074Color Game

本文解析了一款关于石头颜色转换的博弈游戏,通过分析不同条件下的最优策略,得出先手与后手胜负的关键因素。当限制距离k大于等于总石头数n的一半时,最优策略为放置石头于中间位置;当k小于n时,游戏结果取决于石头总数的奇偶性。

洛谷传送门
ATcoder传送门
本来想找一个线段染色的题结果搜到了这个(顺带一提AT的这场比赛A题就是洛谷过水隐藏的那个)

一看是日语的还挺开心就写了顺带提交了翻译

这题水

题意

Z大佬和W大佬玩石头,一共有n个石头,可以选择任意一个石头把它变成另一个颜色,但是下一轮对手不可以选择距离这个石头k以内的石头。两个人都选择最优策略。

两种情况:

⑴如果k >= n /2,放在中间对手就没得选了。

⑵如果k < n 所有的石头肯定都会被选。所以就是n%2。

并没有必要放的代码

//忽略以下懒得删的翻译
/*
n个白色石头以相等的间隔排列。 相邻石头之间的距离为1。
两个玩家用这块石头玩游戏。 每个玩家轮流选择白色石头并将其变为黑色。但是,不能选择上一回合被变黑的石头距离k以内的石头。
不能选择白色石头的玩家输了。
在这个游戏中,双方采用最优策略,询问先手必胜或者后手必胜。
输入:
    n表示石头的数量k表示不可选择的距离。(1 <= n <= 50, 0 <= k <= n)
输出:
    先手first 后手 second
*/
#include <bits/stdc++.h>
using namespace std;
int n, k;
int main()
{
    scanf("%d %d", &n, &k);
    cout << (n % 2 || k >= n / 2 ? "first" : "second") << endl;
    return 0;
}

转载于:https://www.cnblogs.com/Shiina-Rikka/p/11511524.html

以下是BlinkCells的完整代码 private IEnumerator BlinkCells(List<Vector2Int> cellsToBlink) { int blinkCount = 3; // 闪烁次数 float blinkDuration = 0.2f; // 每次闪烁的持续时间 Color blinkColor = Color.red; // 闪烁颜色 // 保存原始颜色 Dictionary<Vector2Int, Color> originalColors = new Dictionary<Vector2Int, Color>(); foreach (var pos in cellsToBlink) { if (IsValid(pos.x, pos.y)) { Cell cell = GetCell(pos.x, pos.y); originalColors[pos] = cell.tile.color; // 假设 Cell 类有一个 tile 属性表示其 Tile 对象 } } // 闪烁逻辑 for (int i = 0; i < blinkCount; i++) { // 改变颜色 foreach (var pos in cellsToBlink) { if (IsValid(pos.x, pos.y)) { Cell cell = GetCell(pos.x, pos.y); cell.tile.color = blinkColor; // 设置为闪烁颜色 } } board.Draw(state); // 更新显示 yield return new WaitForSeconds(blinkDuration); // 恢复颜色 foreach (var pos in cellsToBlink) { if (IsValid(pos.x, pos.y)) { Cell cell = GetCell(pos.x, pos.y); cell.tile.color = originalColors[pos]; // 恢复原始颜色 } } board.Draw(state); // 更新显示 yield return new WaitForSeconds(blinkDuration); } } 我在运行文件时报错:NullReferenceException: Object reference not set to an instance of an object Game+<BlinkCells>d__21.MoveNext () (at Assets/Scripts/Game.cs:362) UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <d8e27b9b2bf34338bc0a9edd46a39109>:0) UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator) Game:CheckQuickReveal(Int32, Int32) (at Assets/Scripts/Game.cs:346) Game:Reveal() (at Assets/Scripts/Game.cs:266) Game:Update() (at Assets/Scripts/Game.cs:
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值