代码很烂,将就看吧;
两个数组分别存x和y坐标,将x坐标排序,两个map存x对应的序号,每次都从拍好序的x往后面倒,如果倒下的牌的范围比当前范围大,则替换当前范围
import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Demo23 { public static void main(String[] args) {
Scanner in=new Scanner(System.in); int n=in.nextInt(); int a[]=new int[n+1]; int b[]=new int[n+1]; Map<Integer,Integer>map=new HashMap<Integer, Integer>(n); Map<Integer,Integer>map1=new HashMap<Integer, Integer>(n); for (int i = 1; i < n+1; i++) { int test=in.nextInt(); a[i]=test; int test1=in.nextInt(); b[i]=test1; map.put(i,test); map1.put(test,i); }
Arrays.sort(a); for (int i = 1; i <n+1 ; i++) { int x=map.get(i); int flag=0; for (int j =1; j < n+1; j++) { if (a[j]==x){
flag=j; break; }
} int y=b[i]; int temp=0; temp=x+y-1; int num=0; while (flag<n+1){ if (flag==n) { break; } else { if (a[flag+1]>=x+1&&a[flag+1]<=temp){
num++; if (a[flag+1]+b[map1.get(map.get(flag))+1]-1>temp)temp=a[flag+1]+b[map1.get(map.get(flag))+1]-1; }
}
flag++; }
System.out.println(num+1); }
}
}