题意: 现有2*n的方阵,起点(1,1),终点为最后一列任意一格,双方进行博弈,每一次双方都能放置一个障碍使得那一个格子不能进入(但必须留出一条路不能全堵上,也不能放置在起点或者已经放过障碍的地方),小红希望最短路径尽可能小,小紫希望最短路径尽可能大,双方都进行最优操作试问最终最短路长度是多少。

知识点: 博弈

思路: 小红想让路径最短所以他会尽可能使小小红走直线,所以他会尽可能把另外一条路堵上,小紫想让路径最长所以他会尽可能把当前的路增加障碍使得小小红疯狂拐弯。然后我们在进入一场博弈仔细观察下

小红为R,小紫为P,最短路为*,通路为0

先看n=5时
****P
00R**

再看n=15时
****P00R******P
00R******P00R**

接着我们就可以发现,我们放置一个障碍物的影响距离为3格,小红第一步放置因为起点不能***涉所以把R放在了(2,3)的位置,这样R的周围5个格子放置的障碍无效化,放上面三格路会被挡死,而放下面相邻两格又不会影响小小红的路线。

而小紫的障碍P则要使得路线变得曲折就会直接在R的管控范围之外立刻拐歪,就像n=15时所演示的那样,而之后就全部都是重复这种博弈。

最终可以看出每5个就要拐歪一次也就是最短路径长度+1,所以最终路径长度就是n-1+n/5,直接输出即可。

参考代码

#include<bits/stdc++.h>
#define int long long
#define ull unsigned long long
#define endl '\n'
using namespace std;
signed main()
{
	cin.tie(0),cout.tie(0),ios::sync_with_stdio(0);
	int t;
	cin >> t;
	while(t--){
		int n;
		cin >> n;
		cout << n-1+n/5 << endl;
	}
	return 0;
}