PAT (Basic Level) Practise (中文) 1053. 住房空置率 (20)

来源:互联网 发布:英文大数据翻译 编辑:程序博客网 时间:2024/05/22 12:20

1053. 住房空置率 (20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断。判断方法如下:

  • 在观察期内,若存在超过一半的日子用电量低于某给定的阈值e,则该住房为“可能空置”;
  • 若观察期超过某给定阈值D天,且满足上一个条件,则该住房为“空置”。

现给定某居民区的住户用电量数据,请你统计“可能空置”的比率和“空置”比率,即以上两种状态的住房占居民区住房总套数的百分比。

输入格式:

输入第一行给出正整数N(<=1000),为居民区住房总套数;正实数e,即低电量阈值;正整数D,即观察期阈值。随后N行,每行按以下格式给出一套住房的用电量数据:

K E1 E2 ... EK

其中K为观察的天数,Ei为第i天的用电量。

输出格式:

在一行中输出“可能空置”的比率和“空置”比率的百分比值,其间以一个空格分隔,保留小数点后1位。

输入样例:
5 0.5 106 0.3 0.4 0.5 0.2 0.8 0.610 0.0 0.1 0.2 0.3 0.0 0.8 0.6 0.7 0.0 0.55 0.4 0.3 0.5 0.1 0.711 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.111 2 2 2 1 1 0.1 1 0.1 0.1 0.1 0.1
输出样例:
40.0% 20.0%

(样例解释:第2、3户为“可能空置”,第4户为“空置”,其他户不是空置。)


/*

 * 思路:
 * 我是每一行直接读取,然后下标为0的那个字符串是那个字符串的长度,
 * 也就是题目中的观察期
 * 注意 观察天数k 必须大于 阈值N天
 * 每天用电量 Ei 必须小于阈值e
 *
 * 可能空置不包括空置
 */
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main{

    public static void main(String[] args) throws Exception {
        BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
        String str=bf.readLine();
        int n=Integer.parseInt(str.split(" ")[0]);
        double e=Double.parseDouble(str.split(" ")[1]);
        int D = Integer.parseInt(str.split(" ")[2]);
        String arr[]=new String[n];
        int maybe=0;
        int blank=0;
        
        for (int i = 0; i < arr.length; i++) {
            arr[i]=bf.readLine();
            String temp[]=arr[i].split(" ");
            int count=0;
            for (int j = 1; j < temp.length; j++) {
                if (Double.parseDouble(temp[j]) < e) {
                    count++;
                    if (count > Integer.parseInt(temp[0]) / 2.0) {
                        if (Integer.parseInt(temp[0]) > D) {
                            blank++;
                            break;
                        }
                    }
                    
                }
            }
            count=0;
            for (int j = 1; j < temp.length; j++) {
                if (Double.parseDouble(temp[j]) < e) {
                    count++;
                    if (count > Integer.parseInt(temp[0]) / 2.0) {
                        maybe++;
                        break;
                    }
                    
                }
            }
        }
        System.out.printf("%.1f",100*(double)(maybe-blank)/n);
        System.out.print("%");
        System.out.printf(" %.1f",100*(double)blank/n);
        System.out.println("%");
    }

}

阅读全文
0 0
原创粉丝点击