Uva 11039 - Building designing

来源:互联网 发布:淘宝快递代发 编辑:程序博客网 时间:2024/05/16 18:33

题目链接:Uva 11039 - Building designing

题目大意,有n个绝对值个不相同的非0整数,选出尽量多的数,排成一个序列,使得正负号交替排列,且绝对值递增。求最长序列长度。


import java.util.Arrays;import java.util.Comparator;import java.util.Scanner;public class Main {/** * @param args */static Integer[] blue=null;static Integer[] red=null;static class DescendCompare implements Comparator{@Overridepublic int compare(Object arg0, Object arg1) {// TODO Auto-generated method stubint a1=(Integer)arg0;int a2=(Integer)arg1;if(a1>a2) return -1;else if(a1<a2) return 1;return 0;}}public static void main(String[] args) {// TODO Auto-generated method stubScanner in=new Scanner(System.in);int t=in.nextInt();int n;while((t--)!=0){int index1=0,index2=0;int flag=0;n=in.nextInt();blue=new Integer[n];red=new Integer[n];for(int i=0;i<n;i++){int temp=in.nextInt();if(temp>0)  blue[index1++]=temp;else  red[index2++]=temp;}DescendCompare comp=new DescendCompare();Arrays.sort(blue, 0, index1, comp);Arrays.sort(red,0,index2);int ans=1;if(Math.abs(red[0])>=blue[0]){flag=1;}else {flag=0;}int i=0,j=0;while(i<index1&&j<index2){if(flag==1){while(i<index1&&(blue[i]>=Math.abs(red[j])))i++;if(i<index1) ans++;flag=0;}else{while(j<index2&&(Math.abs(red[j])>=blue[i]))j++;if(j<index2)  ans++;flag=1;}}System.out.println(ans);}}}


原创粉丝点击