2 1
0 First
1 Second
0 1
你这组没有输出,可以看看忽略了哪里
@[koukis](/user/476684)
by Fish_Clever @ 2021-08-19 09:29:17
@[1093725598yr](/user/104918)
好好,我先看看
by koukis @ 2021-08-19 09:29:59
```cpp
#include<bits/stdc++.h>
#include<string>
#include<iostream>
#include<cstdio>
using namespace std;
int n,m;
struct T{
int d;
string name;
}a[100005];
int work(int k,int x,int y)
{
if(x==0)//往左
{
if(a[k].d==0)//朝内
{
if(k-y<0)
return n-(y-k);
else
return k-y;
}
else//朝外
{
if(k+y>n)
return k+y-n;
else
return k+y;
}
}
else//往右
{
if(a[k].d==0)//朝内
{
if(k+y>n)
return k+y-n;
else
return k+y;
}
else//朝外
{
if(k-y<0)
return n-(y-k);
else
return k-y;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i].d);
cin>>a[i].name;
}
int flag=0;
if(n==2)
{
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
if(y%2==0)
int flag=1;
else
int flag=2;
}
if(flag=2)
cout<<a[2].name;
else
cout<<a[1].name;
}
else
{
int k=1;
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
k=work(k,x,y);
}
cout<<a[k].name;
}
return 0;
}
```
加了一个特判,但是还是wa了4
有没有大佬可以帮忙改改qwq
蒟蒻实在太弱了
by koukis @ 2021-08-19 09:53:02
@[1093725598yr](/user/104918)
好像不是这个问题,也有可能是我太弱了
还是wa了4呢?
可以帮忙看看嘛??qwq
by koukis @ 2021-08-19 10:03:38
好的,我再看看哈@[koukis](/user/476684)
by Fish_Clever @ 2021-08-19 10:09:23
@[1093725598yr](/user/104918)
嗯嗯,太谢谢dalao了
by koukis @ 2021-08-19 10:11:20
@koukis我之前不是这个意思...
3 1
0 First
0 Second
0 Third
0 1
类似的,这组数据你这样不还是没有输出。。。
这并不是特判,是你work中的下标错了。。。
你读入时的下标为1~n,但是可能会return 0(work中),所以要么改下读入,要么work中再考虑考虑,我这也把两种做法都写一下。
by Fish_Clever @ 2021-08-19 10:15:16
@[1093725598yr](/user/104918)
可以具体说一下吗?
这样说我还是有点迷糊,或者在我的code上面改一下,我看一下是怎么回事
by koukis @ 2021-08-19 10:24:18
@[koukis](/user/476684)
```cpp
#include<bits/stdc++.h>
#include<string>
#include<iostream>
#include<cstdio>
using namespace std;
int n,m;
struct T{
int d;string name;
}a[100005];
int work(int k,int x,int step)
{
/*
往左+朝内:0 , 0 -> 往小走
往左+朝外:0 , 1 -> 往大走
往右+朝内:1 , 0 -> 往大走
往右+朝外:1 , 1 -> 往小走
综上所述,
(x^a[k].d) == 0 往小走
else 往大走
首先这样可以简化代码.
*/
if((x^a[k].d)==0)//往小走.
{
if(step<=k-1)//从第k个小人开始走,不会走过第一个小人(因此最多走k-1步).
return k-step;
else{//第k个小人先走到第n个小人(走过1了),花费了k步.
step-=k,k=n;
return k-step;
}
}
else//往大走.
{
if(k+step<=n)
return k+step;
else{//先走过第n个小人,走到1,再继续走.
step=step-(n-k+1),k=1;
return k+step;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i].d);
cin>>a[i].name;
}
int k=1;
for(int i=1,x,y;i<=m;i++)
scanf("%d%d",&x,&y),k=work(k,x,y);
cout<<a[k].name;
return 0;
}
```
by Fish_Clever @ 2021-08-19 10:29:38
@[1093725598yr](/user/104918)
谢谢大佬
orz %%%
by koukis @ 2021-08-19 10:31:26