列表

详情


NC231178. 小沙的中饭

描述

        给定若干个长度不等的环,长度为X的环便会有X个节点,当你选择一个节点,并且该节点相邻节点有被选择过时,则这两个节点中的段落便会使你获得一分。
        现在小红和小沙要根据这些环玩一个游戏,来决定下一餐午饭是听谁的,他们规定,每次可以选择一个没有被选择的节点,如果选择该节点后,会出现一个单位的头尾节点全部都被选择过,那么这个单位就会贡献出一点积分给自己,并且可以让玩家继续选择一个节点。直到出现一次选择过后,不满足上述要求的情况 或者 整个游戏已经没有节点可以选择为止。不可以主动停下。最后积分多的玩家获胜。
        请问如果小红先手,小沙和小红都足够聪明,最后谁能获得最后的胜利。

输入描述

有T组数据
输入一个数字代表有多少个环
随后在一行内输出n个数字 每个数字代表有一个长度为的环
其中50%的数据满足
100%的数据满足

输出描述

如果小红可以获得胜利则输出“xiaohonwin”
如果小沙可以获得胜利则输出“xiaoshawin”
如果最后俩个人积分相同则输出“loss”

示例1

输入:

1
2
2 4

输出:

xiaohonwin

说明:

小红首先选择长度为2的环的一个节点
小沙选择长度为2的另一个节点获得两分
然后选择长度为4的一个节点
随后小红选择长度为4的其他节点,并连续得分。
具体方式如下

小红红色,小沙绿色对应编号为选择的顺序

示例2

输入:

2
1
1
4
4 4 4 4

输出:

xiaohonwin
loss

说明:

只有一个节点,小红选择后得一分

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 7ms, 内存消耗: 436K, 提交时间: 2022-02-16 08:21:41

#include<iostream>
#include<algorithm>
using namespace std;
int a[1010];
int t,n,i,k;
int main()
{
	cin>>t;
	while(t--)
	{
        k=0;
		cin>>n;
		for(i=1;i<=n;i++)
			cin>>a[i];
		sort(a+1,a+1+n);
		for(i=n;i>=1;i--)
		{
        	if(a[i]==1)
				k++;
        	else if(a[i]<4)
				k=-a[i]-k;
        	else
				k=min(-a[i]-k,-a[i]+8+k);
    	}
    	if(k>0)
			cout<<"xiaohonwin"<<endl;
    	else if(k<0)
			cout<<"xiaoshawin"<<endl;
    	else
			cout<<"loss"<<endl;
	}
}

上一题