首页 > 试题广场 >

得分最大

[编程题]得分最大
  • 热度指数:401 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛牛和妞妞从他们的好朋友果果处得到了两个盒子,盒子里是一些写了分值的彩球。牛牛和妞妞发现两个盒子里的彩球数目是相等的,就决定一人一个。

妞妞拿到自己的盒子之后,决定跟牛牛玩一个游戏,规则如下:

一开始两个人盒子里的彩球数目都是n个,由妞妞先手,两人轮流实行下面两个操作中的一个(只能选其中一个执行,不能不执行。),直到两个盒子里的彩球都被拿完位置。

1、从自己的盒子里选一个球拿出来,把球上面的分值加在自己的总得分上边。
2、从对方的盒子里选一个球拿出来,把这个球移出游戏(对方不能再拿这个球)。

妞妞和牛牛都十分聪明,不会出错,并且尽可能让自己的得分比对方多。妞妞想知道,在游戏结束的时候,他能比牛牛多得多少分呢?

输入描述:
第一行一个数字n,表示盒子里初始彩球的数目。
第二行n个数字ai,表示妞妞盒子里第i个彩球的分值是ai
第三行n个数字bi,表示牛牛盒子里第i个彩球的分值是bi


输出描述:
一个整数ans,表示游戏结束的时候妞妞比牛牛多的分值。
示例1

输入

3
2 7 7
2 8 7

输出

0
示例2

输入

2
2 3
4 5

输出

-1

备注:
1<=n<=100000
1<=ai<=1000000
1<=bi<=1000000
严重怀疑是不是测试用例错了.🤐🤐🤐🤐
用例:
47
86 75 73 18 21 86 100 71 10 26 69 27 26 6 53 3 17 49 5 61 90 18 42 1 43 29 51 83 70 49 77 91 1 33 20 61 81 71 49 81 41 30 29 24 98 27 75
1 45 86 16 44 91 11 51 41 5 21 83 51 95 49 85 21 89 89 53 32 53 83 43 58 63 81 21 1 39 23 29 18 87 57 80 85 91 29 13 29 41 65 41 41 81 59
对应输出应该为:
-34
你的输出为:
-11
public class ScoreBig {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int length = sc.nextInt();
        int[] aBox = new int[length];
        int[] bBox = new int[length + 1];
        for (int i = 0; i < aBox.length; aBox[i++] = sc.nextInt()) ;//运行不了的需要把赋值语句放到循环体里, 牛客网有不识别这种语法
        for (int i = 1; i < bBox.length; bBox[i++] = sc.nextInt()) ;
        Arrays.sort(aBox);
        Arrays.sort(bBox);
        int result = 0;
        for (int i = length - 1; i >= 0; i -= 2) result += aBox[i] - bBox[i];
        System.out.println(result);
    }
} 

发表于 2019-07-09 15:00:12 回复(0)