蓝桥杯高僧斗法
作者:互联网
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//博弈论
int a[110],b[110];
int main(int argc, char *argv[]) {
int n=0;
char ch=' ';
while(ch!='\n')
{
scanf("%d",&a[n++]);
ch=getchar();
}
int ans=0;
for(int i=0;i<n;i++)
{
b[i]=a[i+1]-a[i]-1;
}
if(n%2)
b[n-1]=0;//当有奇数个和尚时,把最后一个和尚单独设为一堆,数量为0
for(int i=0;i<n;i+=2)
ans^=b[i];
if(!ans) printf("-1\n");//满足奇异局面,先手必输,无解
/*
else//遍历找出一步内的奇异局面
{
for(int i=0;i<n;i++)//
{
for(int j=1;j<=b[i];j++)
{
b[i]=b[i]-j;
if(i>0)//当移动的不是第一个和尚时,移动和尚除了导致与前面的和尚距离变近,还会和后面的和尚距离变远。
b[i-1]=b[i-1]+j;
ans=0;
for(int k=0;k<n;k+=2)
ans^=b[k];
if(!ans)
{
printf("%d %d\n",a[i],a[i]+j);
break;
}
b[i]=b[i]+j;//如果走这一步不成功,那么还原状态,就行下一次试探。
if(i>0)//当移动的不是第一个和尚时,移动和尚除了导致与前面的和尚距离变近,还会和后面的和尚距离变远。
b[i-1]=b[i-1]-j;
}
if(!ans)break;
}
}
*/
else
{
for(int i=0;i<n;i+=2)
{
//上面的法子是暴力,而这里的比较烧脑,思路就是要转化局势,要么移动一组中左边这个,要么移动一组的右边那个
//借用(a,b,c)三堆石子的例子,这里大概的意思是,a^b<c,那么使c减少到a^b即可
//如果a^b>c那么判断在c所能加的石头数量中,能不能达到c=a^b,如果能就加,那么加多少呢,加到a^b就行,也就是使a[i+1]-a[i]-1=ans^b[i]
if((ans^b[i])<b[i])//说明可以移动一组中的左边这个达到奇异局势
{
printf("%d %d",a[i],a[i]+b[i]-(ans^b[i]));//注意加括号,位运算的优先级较低
break;
}
else if((ans^b[i])<=b[i]+b[i+1])//说明可以移动一组中的右边这个达到奇异局势
{
//这里,要是(a,b,c)a^b>c达到奇异局势,只要使,c=a^b即可,
//转化到题目中就是,a[i+1]-a[i]-1=ans^b[i],即最后的a[i+1]的坐标为a[i]+(ans^b[i])+1
printf("%d %d",a[i+1],a[i]+(ans^b[i])+1);//注意加括号,位运算的优先级较低
break;
}
}
}
return 0;
}
参考博客2(但是毫无注释)
/*
标题:高僧斗法
古时丧葬活动中经常请高僧做法事。仪式结束后,有时会有“高僧斗法”的趣味节目,以舒缓压抑的气氛。
节目大略步骤为:先用粮食(一般是稻米)在地上“画”出若干级台阶(表示N级浮屠)。又有若干小和尚随机地“站”在某个台阶上。
最高一级台阶必须站人,其它任意。(如图1所示)
两位参加游戏的法师分别指挥某个小和尚向上走任意多级的台阶,但会被站在高级台阶上的小和尚阻挡,不能越过。两个小和尚也不能站在同一台阶,也不能向低级台阶移动。
两法师轮流发出指令,最后所有小和尚必然会都挤在高段台阶,再也不能向上移动。轮到哪个法师指挥时无法继续移动,则游戏结束,该法师认输。
对于已知的台阶数和小和尚的分布位置,请你计算先发指令的法师该如何决策才能保证胜出。
输入数据为一行用空格分开的N个整数,表示小和尚的位置。台阶序号从1算起,所以最后一个小和尚的位置即是台阶的总数。(N<100, 台阶总数<1000)
输出为一行用空格分开的两个整数: A B, 表示把A位置的小和尚移动到B位置。若有多个解,输出A值较小的解,若无解则输出-1。
例如:
用户输入:
1 5 9
则程序输出:
1 4
再如:
用户输入:
1 5 8 10
则程序输出:
1 3
*/
标签:台阶,int,printf,高僧,蓝桥,斗法,ans,移动,和尚 来源: https://blog.csdn.net/sinat_39095934/article/details/90272824