洛谷链接:https://www.luogu.com.cn/problem/P1563
java过不了,c可以
java代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt(); //小人人数
int m=in.nextInt(); //指令条数
int[] t=new int[1000001]; //人物转向
String[] str=new String[1000001]; //人物名字
int cur=0,a=0,s=0; //cur为当前小人位置
//输入n个人数据
for(int i=0;i<n;i++) {
t[i]=in.nextInt();
str[i]=in.next();
}
//输入m条指令数据
for(int i=0;i<m;i++) {
//a为指令方向,s为位移量
a=in.nextInt();
s=in.nextInt();
if(t[cur]==a) { // 向外朝左与向内朝右是一致的,反之亦然
//如果方向相同,则向左移
s*=-1;
}
cur=(cur+s+n)%n; //加n余n,防止出现负数,更新位置
}
System.out.println(str[cur]);
}
}
c代码
#include <stdio.h>
#define MAX_N 100000
#define MAX_M 100000
int main()
{
char er_dir[MAX_N] = {0}; // 存储朝向
long n, m, i, cur = 0, a, s;
char er_occ[MAX_N][11] = {{0}}; // 存储职业
scanf("%ld%ld", &n, &m);
for (i = 0; i < n; ++i) {
scanf("%ld%s", er_dir+i, er_occ[i]);
}
for (i = 0; i < m; ++i) {
scanf("%ld%ld", &a, &s); // 获取左右和序数
if (er_dir[cur] == a) // 向外朝左与向内朝右是一致的,反之亦然
{
s *= -1;
}
cur = (cur + n + s) % n;
}
printf("%s", er_occ[cur]);
return 0;
}