方法一(结构体)
#include<bits/stdc++.h>
using namespace std;
struct node{
int num;
string name;
}a[100005];
signed main(){
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>a[i].num>>a[i].name;
int x,y;
int now=0;
for(int i=0;i<m;i++){
cin>>x>>y;
if(a[now].num==0&&x==0) now=(now+n-y)%n;
else if(a[now].num==1&&x==0) now=(now+y)%n;
else if(a[now].num==0&&x==1) now=(now+y)%n;
else if(a[now].num==1&&x==1) now=(now+n-y)%n;
}
cout<<a[now].name<<endl;
return 0;
}
首位相连的数组的规律表示,结构体的复习
方法二:(vector 动态数组,长度不确定,可动态分配空间)
#include<iostream>
#include<vector>
using namespace std;
int n,m;
vector<string> name;
vector<bool> w;
signed main(){
cin>>n>>m;
for(int i=0;i<n;i++){
bool a; string b;
cin>>a>>b;
w.push_back(a);
name.push_back(b);
}
int ponit=0;
while(m--)
{
bool f;
int num;
cin>>f>>num;
if(num!=0)
{
if(w[point]^f)
point=(point+num)%n;
else point=(point-num+n)%n;
}
}
cout<<name[point];
return 0;
}
头文件:#include<vector>
1、vector<T>v; //使用模板类,默认构造函数
2、vector(v.begin(),v.end()); //将[v.begin(),v.end())区间的元素拷贝给本身
3、vector(n,elem); //将n个elem拷贝给本身
4、vector(const vector &v); //拷贝构造函数
push_back(ele); //尾部插入元素ele
pop_back(); //删除最后一个元素