您的位置:首页 > 其它

noip2016_day1_T1

2016-11-24 21:58 127 查看


这道题就是纯模拟,直接按照他给的方法模拟即可。

注意如果直接使用循环模拟的话会有可能爆时。。。(王三岁不会告诉你我是怎么知道的。)

直接附上召唤王三岁的代码:(后有总结)

#include<stdio.h>
#include<string.h>
struct node{
int right,left;
char c[30];
node()
{
right=left=0;
}
}tree[100001];
int n,m;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
int flag=0;
scanf("%d ",&flag);
scanf("%s",&tree[i].c);
if(flag==0)
{
tree[i].right=1;
tree[i].left=-1;
}
else
{
tree[i].right=-1;
tree[i].left=1;
}
}
int flag=1;
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
y=y%n;
if(x==0)//goto left
{
if(tree[flag].left==1)
{
flag=flag+y;
if(flag>n)
{
flag-=n;
}

}
else
{
if(y>=flag)
{
y=y-flag;
flag=n-y;
}
else
{
flag-=y;
}
}
}
else//goto right
{
if(tree[flag].right==1)
{
flag=flag+y;
if(flag>n)
{
flag-=n;
}

}
else
{
if(y>=flag)
{
y=y-flag;
flag=n-y;
}
else
{
flag-=y;
}
}
}
}
printf("%s",tree[flag].c);
}

大概就是如此了。

最好还是注意一下数组开的问题。

(很想爆粗口因为第二题80%的LCA都写出来了结果第一题在这里丢分。果然应该更加谨慎才好。)

附加上一些总结:

1.数组的大小一定要看好不要开小了,如果需要的数组太大了的话可以考虑优化。

2.从今年的情况看,内存有所增大,可以开大就开大,不要犹豫,小了崩盘很划不来

3.减少用循环!减少用循环!减少用循环orz!(死在循环下,并不太风流啊西吧)

王三岁的惨痛(zuo si)经验告诉大家,慎用循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: