欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

被卡性能的时候要care数据类型(洛谷P5594TLE+RE的经历)

程序员文章站 2024-03-17 21:08:52
...

题目内容

被卡性能的时候要care数据类型(洛谷P5594TLE+RE的经历)被卡性能的时候要care数据类型(洛谷P5594TLE+RE的经历)被卡性能的时候要care数据类型(洛谷P5594TLE+RE的经历)

对题目的含义理解错误

看代码~~我以为是统计一下多少人在那天,觉得这个pageNum没大用,结果是我错了……
下为代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int studentNum = scanner.nextInt();
        int pageNum = scanner.nextInt();
        int dayNum = scanner.nextInt();
        int[] dayArray = new int[dayNum];
        for (int i = 0; i < studentNum; i++) {
            for (int j = 0; j < pageNum; j++) {
                int temp = scanner.nextInt();
                dayArray[temp-1]++;
            }
        }
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < dayNum-1; i++) {
            result.append(dayArray[i]).append(" ");
        }
        result.append(dayArray[dayNum-1]);
        System.out.println(result);
        scanner.close();
    }
}

测试:
被卡性能的时候要care数据类型(洛谷P5594TLE+RE的经历)

显然,结果是不对的……

更正后的自测

被卡性能的时候要care数据类型(洛谷P5594TLE+RE的经历)

结尾一个数不对,查看代码,发现bug:
被卡性能的时候要care数据类型(洛谷P5594TLE+RE的经历)

第一次提交——TLE警告

被卡性能的时候要care数据类型(洛谷P5594TLE+RE的经历)
代码是这样的:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int studentNum = scanner.nextInt();
        int pageNum = scanner.nextInt();
        int dayNum = scanner.nextInt();
        int[][] dayArray = new int[dayNum][pageNum];
        for (int i = 0; i < studentNum; i++) {
            for (int j = 0; j < pageNum; j++) {
                int temp = scanner.nextInt();
                dayArray[temp-1][j]++;
            }
        }
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < dayNum-1; i++) {
            int count = 0;
            for (int j = 0; j < pageNum; j++) {
                if (dayArray[i][j] != 0) {
                    count++;
                }
            }
            result.append(count).append(" ");
        }
        int count = 0;
        for (int j = 0; j < pageNum; j++) {
            if (dayArray[dayNum-1][j] != 0) {
                count++;
            }
        }
        result.append(count);
        System.out.println(result);
        scanner.close();
    }
}

第二次提交——TLE×3暴击

被卡性能的时候要care数据类型(洛谷P5594TLE+RE的经历)
本蒟蒻没想到,boolean比int还慢,醉了:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int studentNum = scanner.nextInt();
        int pageNum = scanner.nextInt();
        int dayNum = scanner.nextInt();
        boolean[][] dayArray = new boolean[dayNum][pageNum];
        for (int i = 0; i < studentNum; i++) {
            for (int j = 0; j < pageNum; j++) {
                int temp = scanner.nextInt();
                dayArray[temp-1][j]=true;
            }
        }
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < dayNum-1; i++) {
            int count = 0;
            for (int j = 0; j < pageNum; j++) {
                if (dayArray[i][j]) {
                    count++;
                }
            }
            result.append(count).append(" ");
        }
        int count = 0;
        for (int j = 0; j < pageNum; j++) {
            if (dayArray[dayNum-1][j]) {
                count++;
            }
        }
        result.append(count);
        System.out.println(result);
        scanner.close();
    }
}

第三次提交——RE,宁真狼

被卡性能的时候要care数据类型(洛谷P5594TLE+RE的经历)
这次直接byte,我们既然不想优化算法,那就优化数据类型吧,哈哈:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        byte studentNum = scanner.nextByte();
        byte pageNum = scanner.nextByte();
        byte dayNum = scanner.nextByte();
        byte[][] dayArray = new byte[dayNum][pageNum];
        for (int i = 0; i < studentNum; i++) {
            for (int j = 0; j < pageNum; j++) {
                int temp = scanner.nextInt();
                dayArray[temp-1][j]++;
            }
        }
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < dayNum-1; i++) {
            byte count = 0;
            for (int j = 0; j < pageNum; j++) {
                if (dayArray[i][j] != 0) {
                    count++;
                }
            }
            result.append(count).append(" ");
        }
        byte count = 0;
        for (int j = 0; j < pageNum; j++) {
            if (dayArray[dayNum-1][j] != 0) {
                count++;
            }
        }
        result.append(count);
        System.out.println(result);
        scanner.close();
    }
}

盲测是超byte范围了,可我真的忘了byte的大小诶,测一下~~

自检:
被卡性能的时候要care数据类型(洛谷P5594TLE+RE的经历)
复习一下,byte在-128~127,宁真行……

第四次提交——AC之道,在于Short

被卡性能的时候要care数据类型(洛谷P5594TLE+RE的经历)
附上AC代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        short studentNum = scanner.nextShort();
        short pageNum = scanner.nextShort();
        short dayNum = scanner.nextShort();
        short[][] dayArray = new short[dayNum][pageNum];
        for (int i = 0; i < studentNum; i++) {
            for (int j = 0; j < pageNum; j++) {
                int temp = scanner.nextInt();
                dayArray[temp-1][j]++;
            }
        }
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < dayNum-1; i++) {
            short count = 0;
            for (int j = 0; j < pageNum; j++) {
                if (dayArray[i][j] != 0) {
                    count++;
                }
            }
            result.append(count).append(" ");
        }
        short count = 0;
        for (int j = 0; j < pageNum; j++) {
            if (dayArray[dayNum-1][j] != 0) {
                count++;
            }
        }
        result.append(count);
        System.out.println(result);
        scanner.close();
    }
}

相关标签: # 菜鸡逛洛谷