求助,麻烦大佬帮忙看一下为什么只有70分..

P1563 [NOIP2016 提高组] 玩具谜题

@[yuyuyuyu12345](/user/324176) 一个问题是 ``` else if(x==0&&stu[k].n==1||x==1&&stu[k].n==0)//逆时针 { if(k+y>n) k=k+y-n; else k=k+y; } ``` 这里k+y>0的时候就需要-n了,原因比较明显,除此之外还出现了re现象,数组开大也不管用,建议请高人指教
by WaltVBAlston @ 2022-09-02 17:52:04


@[yuyuyuyu12345](/user/324176) 好家伙我说呢,数据范围十万你就开2000的数组?您心真大,开完就对了
by WaltVBAlston @ 2022-09-02 17:53:58


@[yuyuyuyu12345](/user/324176) 如果有帮助的话请吱一声,有问题的话可以继续问,帮助几个人都没回我真的心态爆炸
by WaltVBAlston @ 2022-09-02 17:55:18


@[WaltVBAlston](/user/261262) 谢谢大佬~,我在捏,我现在去改,谢谢谢谢
by yuyuyuyu12345 @ 2022-09-02 17:56:55


@[yuyuyuyu12345](/user/324176) okok,就是怕回复一堆人就结果没惹鸟我,显得我是个小丑
by WaltVBAlston @ 2022-09-02 17:57:57


@[WaltVBAlston](/user/261262) 我正在改呢大佬,谢谢大佬啦ヾ(≧▽≦*)o
by yuyuyuyu12345 @ 2022-09-02 18:00:44


@[WaltVBAlston](/user/261262) 大佬,您说的第一个问题我没懂..还有数组我改成这么大了,但是还是过不了re那个,麻烦大佬再帮忙看一下,谢谢谢谢 ``` #include <iostream> #include <cstring> using namespace std; struct ren{ char a[100000+5]; int n; }; int main() { int n,m; struct ren stu[100000+5]; cin>>n>>m; int x,y; int k=0; for(int i=0;i<n;i++) cin>>stu[i].n>>stu[i].a; for(int i=0;i<m;i++) { cin>>x>>y; if(x==0&&stu[k].n==0||x==1&&stu[k].n==1)//顺时针 { if(k-y<0) k=n+k-y; else k=k-y; } else if(x==0&&stu[k].n==1||x==1&&stu[k].n==0)//逆时针 { if(k+y>n) k=k+y-n; else k=k+y; } } cout<<stu[k].a; } ```
by yuyuyuyu12345 @ 2022-09-02 18:06:39


@[yuyuyuyu12345](/user/324176) 数组最好要开两倍,我开了两倍是过了的。 第一个问题,就是你的元素下标是从0开始输入的,n个元素下标就是0~n-1,所以说k+y==n的时候就说明已经越界了,第n个下标其实对应到第n+1个元素的位置了,而第n+1个元素是不存在的。下标为x的元素实际上是这一系列元素的第x+1个,这样解释你明白了吗?
by WaltVBAlston @ 2022-09-02 18:10:59


@[WaltVBAlston](/user/261262) 喔~懂啦懂啦!谢谢谢谢大佬
by yuyuyuyu12345 @ 2022-09-02 18:13:40


@[yuyuyuyu12345](/user/324176) 还有一点就是你的结构体里面的a数组不要开天大,因为你a对应的是人名对吧,人名不会很长的,你开个100就够了。你如果开得太大像你现在这样,那就相当于消耗了100005*100005的空间,这么大的空间消耗是不被允许的
by WaltVBAlston @ 2022-09-02 18:13:49


| 下一页