题目链接:
思路:模拟
因为数组b里的元素是顺序对应a数组元素的和,可以开个c数组储存b数组元素对应的a数组元素区间;
然后对每个c数组区间,找出最大并且存在与其相邻且小于它的元素的元素,从这个元素开始向左或者向右合并此区间所有元素;
要注意一下区间长度为1即只有一个元素的情况,还有输出的位置是合并后的相对位置;
代码:
1 #include2 #define MAXN 501 3 using namespace std; 4 5 int main(void){ 6 int n, a[MAXN], k, b[MAXN], c[MAXN]; 7 scanf("%d", &n); 8 for(int i=0; i num){ 33 num=a[j]; 34 mm=j; 35 } 36 } 37 int mmm=mm; 38 if(mmm==c[i]+1-(i==0)&&mmm a[mm+1]){ 53 int x=mm; 54 while(x c[i]-(i==0)){ 63 d[star]='L'; 64 e[star]=jj; 65 x--; 66 jj--; 67 star++; 68 } 69 }else if(mm>c[i]+(i!=0)&&a[mm]>a[mm-1]){ 70 int x=mm; 71 while(x>c[i]+(i!=0)){ 72 d[star]='L'; 73 e[star]=jj; 74 x--; 75 jj--; 76 star++; 77 } 78 x=mm+1; 79 while(x<=c[i+1]){ 80 d[star]='R'; 81 e[star]=jj; 82 x++; 83 star++; 84 } 85 }else if(b[i]==a[c[i]+1]){ 86 continue; 87 } 88 if(!flag){ 89 printf("NO\n"); 90 return 0; 91 } 92 } 93 printf("YES\n"); 94 for(int j=0; j