1053 住房空置率 (20 分)
题目:1053 住房空置率 (20 分)
在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断。判断方法如下:
在观察期内,若存在超过一半的日子用电量低于某给定的阈值 e,则该住房为“可能空置”;
若观察期超过某给定阈值 D 天,且满足上一个条件,则该住房为“空置”。
现给定某居民区的住户用电量数据,请你统计“可能空置”的比率和“空置”比率,即以上两种状态的住房占居民区住房总套数的百分比。
输入格式:
输入第一行给出正整数 N(≤),为居民区住房总套数;正实数 e,即低电量阈值;正整数 D,即观察期阈值。随后 N 行,每行按以下格式给出一套住房的用电量数据:
K E1 E2 ... EK
其中 K 为观察的天数,Ei 为第 i 天的用电量。
输出格式:
在一行中输出“可能空置”的比率和“空置”比率的百分比值,其间以一个空格分隔,保留小数点后 1 位。
输入样例:
5 0.5 10 6 0.3 0.4 0.5 0.2 0.8 0.6 10 0.0 0.1 0.2 0.3 0.0 0.8 0.6 0.7 0.0 0.5 5 0.4 0.3 0.5 0.1 0.7 11 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 11 2 2 2 1 1 0.1 1 0.1 0.1 0.1 0.1
输出样例:
40.0% 20.0%
(样例解释:第2、3户为“可能空置”,第4户为“空置”,其他户不是空置。)
思路:
- 边输入变判断,多出利用计数。计算百分比。
- 讲下输出问题,就按题目说的一样保留一位 用%.1f(float)或%.1lf(double), 百分号直接用用一个%是无法输出的,就像%d代表输出整数一样,要输出%号就用%%的格式,前面的%号起到转义的作用。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <cctype> 4 #include <iostream> 5 #include <sstream> 6 #include <cmath> 7 #include <algorithm> 8 #include <string> 9 #include <stack> 10 #include <queue> 11 #include <vector> 12 #include <map> 13 using namespace std; 14 15 int main() 16 { 17 int n, d, k; 18 double e, ek; 19 int pk = 0, kk = 0; //pk可能空置, kk空置 20 scanf("%d %lf %d", &n, &e, &d); 21 for(int i = 0; i < n; i++) 22 { 23 scanf("%d", &k); 24 int cnt = 0; 25 for(int j = 0; j < k; j++) 26 { 27 scanf("%lf", &ek); 28 if(ek < e) 29 cnt++; 30 } 31 if(k <= d && cnt > k/2) 32 pk++; 33 if(k > d && cnt > k/2) 34 kk++; 35 } 36 printf("%.1lf%% %.1lf%%\n", 1.0*pk/n*100, 1.0*kk/n*100); 37 return 0; 38 }
总结:
题目简单,但是细节一下没注意,修改了好几下……, 前面是与各自的观察天数的半数比,后面是除以套房数,一开始顺手给除成观察天数了,就是还不够细致的原因,两个都败在d上,也不知为何这么爱d。