哪位大神可以帮我看一下我的程序哪里出错了?

本人萌新蒟蒻请多多包涵~
准备用这种方法AC了再去学传说中的O(10k)方法~
想了好久想不出来哪里错了~大牛帮忙看一下吧~
c++
#include <bits/stdc++.h>
using namespace std;
int s[100005],a[100005];
int main()
{
int i,j,k,l,n,m;
scanf("%d%d",&n,&l);
for(i=1;i<=n+5;++i) s[i]=i;
while(l--){
int x,y,z;
cin>>x>>y>>z;++z;
k=y-x+1;
for(i=x;i<=y;++i) a[i-x]=s[i];
for(i=n;i>y;--i) s[i-k-1]=s[i];
for(i=n;i>z+k;--i) s[i]=s[i-k-1];
for(i=z;i<=z+k;++i) s[i]=a[i-z];
for(i=1;i<=13;++i) printf("%d\n",s[i]);
printf("\n\n");
}
for(i=1;i<=10;++i) printf("%d\n",s[i]);
return 0;
}

2 条评论

  • @ 2017-07-04 19:19:39

    我试着把楼主的两个for简化成了两个memmove但是好像有四个RE不知道为啥,希望大神可以看一下

    #include <bits/stdc++.h>
    using namespace std;
    int s[100020], a[100020];
    int main()
    {
        int i, j, k, l, n, m;
        scanf("%d%d", &n, &l);
        for (i = 1;i <= n + 20;++i) s[i] = i;
        while (l--) {
            int x, y, z;
            cin >> x >> y >> z;
            ++z;
            k = y - x + 1;
            for (i = x;i <= y;++i) a[i - x] = s[i];
            memmove(s + x, s + y + 1, sizeof(int)*(n - k));
            memmove(s + z+k, s + z, sizeof(int)*(n - k));
            for (i = z;i <z + k;++i) s[i] = a[i - z];
        }
        for (i = 1;i <= 10;++i) printf("%d\n", s[i]);
        return 0;
    }
    
  • @ 2017-07-04 19:16:01

    你似乎第二个for错了,好像没有把剪贴掉字串后面的东西前移,然后第四个for多粘了一个最后的0,应该把<=改成<

  • 1

信息

ID
1058
难度
5
分类
模拟 点击显示
标签
(无)
递交数
2006
已通过
683
通过率
34%
被复制
6
上传者