- 粘贴文本
- 2017-07-04 17:35:17 @
本人萌新蒟蒻请多多包涵~
准备用这种方法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 条评论
-
沉江底 LV 9 @ 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