计蒜客——抢气球

  1. 问题描述
      教室的墙上挂满了气球,五颜六色,小朋友们非常喜欢。
      刚一下课,小朋友们就打算去抢这些气球。每个气球在墙上都有一定的高度,只有当小朋友跳起来时,手能够到的高度大于等于气球的高度,小朋友才能摘到这个气球。为了公平起见,老师让跳的低的小朋友先摘,跳的高的小朋友后摘小朋友都很贪心,每个小朋友在摘气球的时候都会把自己能摘的气球都摘掉。
      很巧的是,小朋友们跳起来手能够着的**高度都不一样**,这样就不会有跳起来后高度相同的小朋友之间发生争执了。
    【输入格式】
      第一行输入两个空格分隔的整数n,m,其中n表示小朋友的数量,m表示墙上气球的数量。
      第二行输入n个正整数(每两个整数之间用空格隔开),第i个数为 ai,表示第i个小朋友跳起来手能够着的高度为ai。
      第三行输入m个正整数(每两个整数之间用空格隔开),第i个数为 hi,表示第i个气球的高度为hi。
    【输出格式】
      输出一共n行,每行一个整数。第i行表示第i个小朋友摘到的气球数量。
    【输入样例】
        【样例1】
       5 6
       3 7 9 6 4
       1 2 3 4 5 6
       【样例2】
       10 10
       1 2 3 4 5 6 7 8 9 10
       3 1 4 6 7 8 9 9 4 12
    【输出样例】
        【样例1】
       3
       0
       0
       2
       1
      【样例2】
       1
       0
       1
       2
       0
       1
       1
       1
       2
       0
    【样例解释】
      对于第一组样例输入,摘取气球的顺序依次为1,5,4,2,3号小朋友。1号小朋友能摘1,2,3号气球,5号小朋友能摘4号气球,4号小朋友能摘5,6号气球,2,3号小朋友没有气球可摘了。
      代码如下:
  2. import java.util.Arrays;
    import java.util.Comparator;
    import java.util.Scanner;
    
    class children
    {
    	int gethigh;
    	int id;
    	int getnumber =0;
    	 children(int gethigh)
    	{
    		this.gethigh = gethigh;
    
    	}
    	
    }
    class ballon
    {
    	int high;
    	int id1;
    	int number = 0;
    	ballon(int high)
    	{
    		this.high = high;
    }
    }
    class mycmp11 implements Comparator<children>
    {
    
    	@Override
    	public int compare(children o1, children o2) {
    		// TODO Auto-generated method stub
    		if(o1.gethigh < o2.gethigh) {
    			return  -1;
    		}else
    			return 1;
    	}
    
    	
    
    
    }
    class mycmp22 implements Comparator<ballon>
    {
    
    	@Override
    	public int compare(ballon o1, ballon o2) {
    		// TODO Auto-generated method stub
    		if(o1.high == o2.high)
    		{
    			return 0;
    		} else
    			return o1.high < o2.high ? -1 : 1;
    	}
    }
    
    public class 抢气球 {
         static int n;
         static int m;
        static int[] gethigh;
        static int[] high;
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
                Scanner sc = new Scanner(System.in);
                n = sc.nextInt();
                m = sc.nextInt();
                gethigh = new int[n];
                high = new int[m];
                children [] ch = new children[n];
                ballon [] ba = new ballon[m];
                for(int i = 0;i<n;i++)
                {
                	gethigh[i] = sc.nextInt();
                	ch[i] = new children(gethigh[i]);
                	ch[i].id = i;
                }
                for(int j =0 ;j<m;j++)
                {
                	high[j] = sc.nextInt();
                	ba[j] = new ballon(high[j]);
                	ba[j].number = ba.length;
                }
            Arrays.sort(ch, 0, n,new mycmp11());
            Arrays.sort(ba, 0, m,new mycmp22());
            int i = 0;
            int j = 0;
          while(i<n&&j<m)
          {
        	  if(ch[i].gethigh >=ba[j].high)
        	  {
        		  ch[ch[i].id].getnumber++;   //高矮排序后,这时候需要指定id为几的学生。
        		  j++;                  
          //不能用双重for循环,那样就把每一个学生的gethigh与每一个气球的high比较                		                      
           //而这里用while直接没有让不同的学生对同一数据进行比较
        	  }
        	  else
        	  {
        	     i++;  
        	  }
          }            
             for(int i1 = 0;i1<n;i1++)
             {
            	 System.out.println(ch[i1].getnumber);
             }
    	}
    }
    
    	
    

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹坛净月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值