java练习

代码
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Scanner;

public class T08 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] a = new int[n];
        int[] b = new int[n];
        in.nextLine();
        if (n % 10 == 0) {
            for (int i = 0; i < n; i++) {
                String str = in.nextLine();  //输入数和代价
                str = str.replace(" ", "");
                a[i] = Integer.parseInt(String.valueOf(str.charAt(0)));
                if (str.length() == 2) {
                    b[i] = Integer.valueOf(String.valueOf(str.charAt(1)));//char转string转integer
                } else if (str.length() == 3) {
                    str = String.valueOf(str.charAt(1)) + String.valueOf(str.charAt(2));
                    b[i] = Integer.parseInt(str);
                } else if (str == "") {
                    i--;
                    a[i] = 0;
                }
            }

            int q = n / 10;//计算最多出现的次数
            //[[数组a的值,出现次数,多出次数,]]
            int k;
            int l = 0;
            int[][][] c = new int[n][2][n];
            int count = 0;

            for (int i = 0; i < a.length; i++) {

                k = i - 1;//索引在自己前面


                do {//条过了
                    if (i == 0) {
                        break;
                    }//跳过k为-1,i为0,
                    if (a[i] == a[k]) {
                        l = 1;
                    }
                    k -= 1;
                } while (k > 0);
                if (l == 1) {
                    l = 0;
                    continue;
                }//判断是不是第一次出现,不是就跳过

                c[i][0][0] = a[i];
                int m = 0;
                for (int j = i; j < a.length; j++) {
                    if (a[i] == a[j]) {
                        count += 1;
                        c[i][1][m++] = b[j];
                    }
                }
                for (int j = 0; j < a.length; j++) {
                    if (a[i] == a[j]) {

                    }
                }

                c[i][0][1] = count;
                count = 0;
                c[i][0][2] = c[i][0][1] - q;
            }  //统计重复次数


            //复制三维数组
            int[][][] d = new int[n][2][n];
            int o = 0;
            for (int i = 0; i < c.length; i++) {//固定c的索引
                for (int j = 0; j < c.length; j++) {//固定d的索引
                    if (c[i][0][0] == j && c[i][0][1] !=0) {//c的。。值和d的索引相当
                        for (int m = 0; m < c[i][0].length; m++) {//
                            d[j][0][m] = c[i][0][m];
                        }
                        for (int m = 0; m < c[i][1].length; m++) {//
                            d[j][1][m] = c[i][1][m];
                        }
                    }
                }
            }


            int sum = 0;
            for (int i = 0; i <d.length; i++) {
                ArrayList<Integer> list = new ArrayList();
                if (d[i][0][1] > q) {//只有超过最大出现次数的才执行
                    for (int j = 0; j < d[i][1].length; j++) {
                        list.add(d[i][1][j]);//收集单个a的值的代价所有代价
//                        list.remove("0");//去除无意义的
                    }
                    Collections.sort(list);
                    Collections.reverse(list); //单个a的值的代价排序
                    for (int j = list.size(); j >= 0; j--) {
                        if (list.size() > q) {
                            sum += list.get(j - 1);
                            list.remove(j-1);
                        }
                    }
                }
            }
            System.out.println(sum);
        }
    }
}

题目描述:

有一个长度为 n 的数组(n 是 10 的倍数),每个数 ai 都是区间 [0, 9] 中的整数。小明发现数组里每种数出现的次数不太平均,而更改第 i 个数的代价为bi,他想更改若干个数的值使得这 10 种数出现的次数相等(都等于n/10),请问代价和最少为多少。

输入格式:

输入的第一行包含一个正整数 n 。
接下来 n 行,第 i 行包含两个整数 ai , bi ,用一个空格分隔。

输出格式:

输出一行包含一个正整数表示答案。




关键词:java,多维数组

posted @   基础狗  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示