想做个网站怎么做,北京网站建设公司网站优化,上海企业建设网站电话,网站公司的未来题意
输入n 再输入n个数为1~n的一种排列 再输入n-1个1或0#xff0c;1表示该元素可以和后面的元素进行交换#xff0c;0表示不能和后面的元素进行交换 让我们判断这个数组能否经过交换得到一个递增序列
分析
我们发现连续的1的范围内再加上后面一个0 此区间内任意一个元…题意
输入n 再输入n个数为1~n的一种排列 再输入n-1个1或01表示该元素可以和后面的元素进行交换0表示不能和后面的元素进行交换 让我们判断这个数组能否经过交换得到一个递增序列
分析
我们发现连续的1的范围内再加上后面一个0 此区间内任意一个元素是可以通过向后交换去到任意位置的 因为连续的1表示区间内所有元素不仅可以向后交换也可以说是后一个元素可以向前交换。然而0前面的元素却不能交换到0后面 所以每个小范围独立 只要把所有那些连续的1后一个0 符合条件的范围内全部排序 之后的序列是个递增序列 即满足 否 则不满足
code package main;import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class Main{public static void main(String [] args){int n;Scanner sc new Scanner(System.in);int[] a new int[200010];int[] bok new int[200010];int[] pos new int[200010];n sc.nextInt();for(int i1;in;i){a[i] sc.nextInt();}int tmp 0,s-1,e-1;String line sc.next();for(int i0;iline.length();i){tmp line.charAt(i)-0;if(s-1tmp1)si;else if(tmp0s!-1){ei1;Arrays.sort(a,s1,e1);s-1;e-1;}}if(tmp1s!-1)Arrays.sort(a,s1,n1);int i;for(i1;in;i)if(a[i]!i){System.out.println(NO);break;}if(in1)System.out.println(YES);}
}