题目链接: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!