样例对,爆零了
本程序
#include<bits/stdc++.h>
#define Maxn 100005
using namespace std;
int num[Maxn],t1[Maxn],t2[Maxn];
void copy1(int x,int y)
{
int j = x;
for(int i = 1; i <= y-x+1; i ++, j ++){
t1[i] = num[j];
}
}
void copy2(int x,int y){
int j = x;
for(int i = 1; i <= y-x+1; i ++, j ++){
t2[i] = num[j];
}
}
void paste2(int s,int len1,int e,int len2){
int i;
i = len1;
while(i){
num[s] = t1[i];
i --,s --;
}
i = len2;
while(s >= e){
num[s] = t2[i];
i --,s --;
}
}
void paste1(int s){
int i;
i = 1;
while(t1[i] != 0){
num[s] = t1[i];
i ++,s ++;
}
i = 1;
while(t2[i] != 0){
num[s] = t2[i];
i ++,s ++;
}
}
int main(){
int n,k;
cin >> n >> k;
for(int i = 1; i <= n; i ++){
num[i] = i;
}
for(int i = 1; i <= k; i ++){
int l,r,f;
cin >> l >> r >> f;
copy1(l,r);
// printf("t1={%d",t1[1]);
// for(int j = 2; j <= r-l+1; j ++){
// printf(",%d",t1[j]);
// }
// printf("};\n");
if(f < l){
copy2(f+1,l-1);
// printf("t2={%d",t2[1]);
// for(int j = 2; j <= l-f-1; j ++){
// printf(",%d",t2[j]);
// }
// printf("};\n");
paste1(f+1);
}
else if(f > r){
copy2(r+1,f);
// printf("t2={%d",t2[1]);
// for(int j = 2; j <= f-r; j ++){
// printf(",%d",t2[j]);
// }
// printf("};\n");
paste2(f,r-l+1,l,f-r);
}
memset(t1,0,sizeof(t1));
memset(t2,0,sizeof(t2));
// for(int j = 1; j <= n; j ++){
// cout << num[j] << " ";
// }
// cout << endl;
}
for(int i = 1; i <= 10; i ++){
cout << num[i] << endl;
}
return 0;
}
题解标程
#include<bits/stdc++.h>
#define up(l,r,i) for(int i=l;i<=r;i++)
#define dn(l,r,i) for(int i=l;i>=r;i--)
using namespace std;
typedef long long LL;
const int INF =2147483647;
int qread(){
int w=1,c,ret;
while((c=getchar())> '9'||c< '0') w=(c=='-'?-1:1); ret=c-'0';
while((c=getchar())>='0'&&c<='9') ret=ret*10+c-'0';
return ret*w;
}
const int MAXN =1e3+3;
int n,m,S[MAXN],T[MAXN],L[MAXN];
int main(){
n=qread(),m=qread(); up(1,m,i){
int a=qread(),b=qread(),c=qread();
L[i]=b-a+1,S[i]=c+1,T[i]=a;
}
up(1,10,i){
int t=i; dn(m,1,j){
if(S[j]<=t&&t<=S[j]+L[j]-1) t+=T[j]-S[j]; else
if(S[j]> t&&T[j]<=t) t+=L[j]; else
if(S[j]< t&&t-L[j]<T[j]) t-=L[j];
}
printf("%d\n",t);
}
return 0;
}
但是以下数据
输入:
12 2
3 9 0
1 3 7
本程序输出:
6
7
8
9
3
4
5
1
2
10
标程输出:
6
7
8
9
1
2
10
3
4
5
亲测(纸上验算)是:
6
7
8
9
3
4
5
1
2
10
是出现了什么读题错误吗