洛谷:P1563 [NOIP2016 提高组] 玩具谜题(C语言)

题目链接:P1563

自己在第一次做的时候很快就写出了代码然后过了示例1,因为是根据示例1写的,所以变量n用7在替代,结果一直没发现,发现示例2直接鬼畜了。提交了一次,5分,只过了一个

 然后罚坐了几十分钟,发现这一个符号的错误。

 上代码:

#include<stdio.h>
struct toy{
	char name[10];
	int  j;
};//每个玩偶的名字和朝向 
int main()
{
	int n,m;
	scanf("%d %d",&n,&m);
	int b[m+1][3];//二维数组 
	struct toy a[n+1];//结构体数组 
	int i,j;
	for(i=1;i<n+1;i++)
	{
		scanf("%d %s",&a[i].j,&a[i].name);//0为朝内,1为朝外 
	}
	for(i=1;i<=m;i++)
	{
		scanf("%d %d",&b[i][1],&b[i][2]);/*b[i][1]为朝左朝右的判断,1为右,0为左:b[i][2]储存步数 */
	}
	int l;
	i=1;
		for(l=1;l<=m;l++)
		{
			if(a[i].j!=b[l][1])//用到了异或的思想 
			{
				i=i+b[l][2];//逆时针转 
			}else
			{
				i=i-b[l][2];//顺时针转 
			}
			if(i<1)//使为i为合适值 
			{
				i=n+i;
			}
			if(i>n)
			{
				i=i-n;
			}
		}
	printf("%s",a[i].name);//输出最终玩偶名字 
	return 0;
}

异或思想是这样的:

指令的顺序👇玩偶的朝向👉0(内)1(外)
0(左)顺时针-逆时针+
1(右)逆时针+顺时针-

需要注意的是要使 i 处于合适的值(1<=i<=n)

祝大家AC!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值