34 条题解
-
0-------- LV 8 @ 2017-05-04 13:37:08
#include<bits/stdc++.h> using namespace std; int n,m,c,l=0; bool f; struct node{ bool b; string name; }line[500007]; int main(){ cin>>n>>m; for(int i=0;i<n;i++) cin>>line[i].b>>line[i].name; for(int i=1;i<=m;i++){ cin>>f>>c; if(line[l].b==1) if(f==0)l+=c;else l-=c; else if(f==0)l-=c;else l+=c; if(l>=n) l-=n; if(l<0) l+=n; } cout<<line[l].name; }
-
02017-02-17 11:21:12@
为什么测试点是随机的,害的我掉了百分之一的AC率555……
题解送上#include<bits/stdc++.h> using namespace std; bool a[100001]; char x[200001][1001]; int b,y; int main() { int i,j,k=0,l,n,m; cin>>n>>m; for(i=0;i<n;i++) cin>>a[i]>>x[i]; for(i=0;i<m;i++) { cin>>b>>y; if(a[k]) b=(b+1)%2; if(b) k+=y; else k-=y; if(k<0) k+=n; if(k>n-1) k-=n; } cout<<x[k]<<endl; return 0; }
-
02017-02-17 11:02:17@
#include<bits/stdc++.h> using namespace std; struct alk{ bool d; string h; }; alk a[100000]; int m,n,e=0; int main() { cin>>n>>m; for(int i=0;i<n;i++){ cin>>a[i].d>>a[i].h; } while(m--){ bool x; int y; cin>>x>>y; bool r=x^a[e].d; e= r ? e+y:e-y; if(e<0)e+=n; if(e>n-1)e-=n; } cout<<a[e].h<<endl; return 0; }
-
02017-02-17 11:01:24@
#include<bits/stdc++.h> using namespace std; struct alk{ bool d; string h; }; alk a[100000]; int m,n,e=0; int main() { cin>>n>>m; for(int i=0;i<n;i++){ cin>>a[i].d>>a[i].h; } while(m--){ bool x; int y; cin>>x>>y; bool r=x^a[e].d; e= r ? e+y:e-y; if(e<0)e+=n; if(e>n-1)e-=n; } cout<<a[e].h<<endl; return 0; }
-
02017-02-15 20:00:36@
var
zy:array[1..100000]of string;
a:array[1..100000]of integer;
i,n,m,bj,x,y:longint;
begin
bj:=1;
read(n,m);
for i:=1 to n do
begin
read(a[i],zy[i]);
end;
for i:=1 to m do
begin
read(x,y);
if (x=0)and(a[bj]=0)then bj:=bj-y else
if (x=0)and(a[bj]=1)then bj:=bj+y else
if (x=1)and(a[bj]=0)then bj:=bj+y else
if (x=1)and(a[bj]=1)then bj:=bj-y;
if bj>n then bj:=bj-n;
if bj<1 then bj:=bj+n;
end;
writeln(zy[bj]);
end. -
-12018-05-26 14:53:12@
#include<bits/stdc++.h> using namespace std; const int maxn=1e5; char name[maxn][11]; int arr[maxn]; int n,m; int t=0; int word1[maxn],word2[maxn]; int main() { ios::sync_with_stdio(false); cin>>n>>m; for(int i=0;i<n;i++) { cin>>arr[i]>>name[i]; } for(int i=0;i<m;i++) { cin>>word1[i]>>word2[i]; } for(int i=0;i<m;i++) { if(arr[t]==0&&word1[i]==0||arr[t]==1&&word1[i]==1) { t-=word2[i]; if(t<0) t=n+t; } else if(arr[t]==0&&word1[i]==1||arr[t]==1&&word1[i]==0) { t+=word2[i]; if(t>n-1) t=t-n; } } cout<<name[t]; }
-
-12018-01-22 20:35:41@
数组开100000的时候Dev似乎编译出来挂掉,但Vijos就运行得很OK
12组数据应该是位置=0的情况,16组应该是跟%n
有关#include <cmath> #include <cstring> #include <iostream> using namespace std; int main(){ int pos=1; int n,m,i=0; int dir[100000]; int cmd[2][100000]; char name[100000][11]; memset(dir,0,sizeof(dir)); memset(cmd,0,sizeof(cmd)); memset(name,0,sizeof(name)); scanf("%d%d",&n,&m); for(i=1;i<=n;i++) scanf("%d%s",&dir[i],&name[i]); for(i=1;i<=m;i++){ scanf("%d%d",&cmd[0][i],&cmd[1][i]); if(cmd[0][i]==dir[pos]){ pos-=cmd[1][i]; while(pos<=0)pos+=n; } else{ pos+=cmd[1][i]; while(pos>n)pos-=n; } } printf("%s",name[pos]); return 0; }
-
-12017-11-04 23:01:43@
//20 line 超短!!!
#include <iostream>
#include <string>
using namespace std;
string name[100005];
int chao[100005],n,m,a,s,now=1;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>chao[i]>>name[i];
for(int i=1;i<=m;i++)
{
cin>>a>>s;
if(chao[now]==a)
now-=now-s>0?s:s-n;
else
now+=now+s>n?s-n:s;
}
cout<<name[now]<<endl;
} -
-12017-11-03 16:57:40@
暴力(注意数组大小)
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000008],b,c;
string s[1000008];
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
cin>>a[i]>>s[i];
int k=0;
for(int i=1;i<=m;i++)
{
cin>>b>>c;
if((b&&a[k])||(!b&&!a[k]))
k=(k+n-c)%n;
else
k=(k+c)%n;
}
cout<<s[k];
return 0;
} -
-12017-10-23 16:48:48@
#include<bits/stdc++.h>
using namespace std;
int c[200001],d[200001];
struct zym
{
int x;
char b[21];
}
a[200001];
int main()
{
int n,m,s=1;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d %s",&a[i].x,a[i].b);
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&d[i],&c[i]);
}
for(int i=1;i<=m;i++)
{
if(d[i]!=a[s].x)
{
s+=c[i];
if(s>n)
{
s-=n;
}
}
else
{
s-=c[i];
if(s<1)
{
s+=n;
}
}
}
printf("%s",a[s].b);
return 0;
} -
-12017-10-20 23:56:53@
第12个数据怎么过?
-
-12017-10-19 21:59:54@
一道简单的模拟
对n取余即可
注意%n==0的情况
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s[100011];
int n,m,a[100011];
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{scanf("%d",&a[i]);
cin>>s[i];
}
int t=0;int x,y;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
if(x==1)
{
if(a[t]==0)t=(t+y)%n;
else t=(t-y+n)%n;
}
if(x==0)
{
if(a[t]==0)t=(t-y+n)%n;
else t=(t+y)%n;
}
}
cout<<s[t];
return 0;
} -
-12017-02-18 17:09:34@
什么情况!!!
为什么我的数组下标从1到n就挂了,0到n-1就a了!!我靠,什么鬼
附上原来的代码:
c++
#include<bits/stdc++.h>
#define ll long long
using namespace std;
bool a[100005];
string name[100005];
struct he{
bool a;
int b;
}b[100005];
int main()
{
memset(a,0,sizeof(a));
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i]>>name[i];
for(int i=1;i<=m;i++) cin>>b[i].a>>b[i].b;
int ans=1;
for(int i=1;i<=m;i++){
if((a[ans]+b[i].a)%2==0) ans-=b[i].b;
else ans+=b[i].b;
while(ans<=0) ans+=n;
while(ans>n) ans-=n;
}
cout<<name[ans]<<endl;
return 0;
}
现在的正解:
c++
#include<bits/stdc++.h>
#define ll long long
using namespace std;
bool a[100005];
string name[100005];
struct he{
bool a;
int b;
}b[100005];
int main()
{
memset(a,0,sizeof(a));
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i]>>name[i];
for(int i=0;i<m;i++) cin>>b[i].a>>b[i].b;
int ans=0;
for(int i=0;i<m;i++){
if((a[ans]+b[i].a)%2==0) ans-=b[i].b;
else ans+=b[i].b;
while(ans<0) ans+=n;
while(ans>n) ans-=n;
}
cout<<name[ans]<<endl;
return 0;
}
-
-12017-02-17 11:00:57@
#include<bits/stdc++.h>
using namespace std;
struct alk{
bool d;
string h;
};
alk a[100000];
int m,n,e=0;
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i].d>>a[i].h;
}
while(m--){
bool x;
int y;
cin>>x>>y;
bool r=x^a[e].d;
e= r ? e+y:e-y;
if(e<0)e+=n;
if(e>n-1)e-=n;
}
cout<<a[e].h<<endl;
return 0;
}
信息
- ID
- 2003
- 难度
- 6
- 分类
- (无)
- 标签
- 递交数
- 2710
- 已通过
- 792
- 通过率
- 29%
- 被复制
- 10
- 上传者