UVA 815 Flooded!

题意:来自:https://blog.csdn.net/lecholin/article/details/70186673

思路:

①数组存每个网格的高度,然后排序,做题时想象为上面的柱状图。

②注意对淹没的处理。

③注意每个输出都有空行。

 1 #include "stdio.h"
 2 #include "stdlib.h"
 3 #include "string.h"
 4 #define FIN freopen("input.txt","r",stdin)
 5 #define FOUT freopen("output.txt","w",stdout)
 6 int main()
 7 {
 8     //FIN;
 9     //FOUT;
10     int m, n;
11     int data[1000],kase=0;
12     double level, percentage, high = 0,sum;
13     while (scanf("%d%d",&m,&n)==2&&n!=0&&m!=0)
14     {
15         kase++;
16         for (int i = 0; i < m*n; i++)
17         {
18             scanf("%d", &data[i]);
19         }
20         high = 0;
21         scanf("%lf", &sum);
22         sum /= 100;//正方形为10*10,化简一下sum
23         //排序
24         for (int i = 0; i < m*n; i++)
25         {
26             for (int j = i + 1; j < m*n; j++)
27             {
28                 if (data[i] > data[j])
29                 {
30                     int ex = data[i];
31                     data[i] = data[j];
32                     data[j] = ex;
33                 }
34             }
35         }
36         //data[m*n] = 100000;//最大的边界
37         //输出
38         /*printf("排序后:\n");
39         for (int i = 0; i < m*n; i++)
40         {
41             printf("%-4d", data[i]);
42             if ((i + 1) % m == 0)
43                 printf("\n");
44         }*/
45         for (int i = 0; i < n*m; i++)
46         {
47             if (sum != -1 && i == m*n - 1)//找到最后一个说明淹没了 
48             {
49                 high += (sum*1.0) / (i + 1);
50                 high += data[0];
51                 int cntDown = (i + 1);
52                 percentage = (cntDown*1.0) / (m*n) * 100;
53                 sum = -1;
54                 break;
55             }
56             if ((data[i + 1] - data[i])*(i+1)< sum)//小就继续往上面走
57             {
58                 sum -= (data[i + 1] - data[i])*(i+1);
59                 high += data[i+1]-data[i];
60             }
61             else
62             {
63                 high += (sum*1.0) / (i+1);
64                 high += data[0];
65                 int cntDown =(i+1);
66                 percentage = (cntDown*1.0) / (m*n)*100;
67                 sum = -1;
68                 break;
69             }
70             
71         }
72         printf("Region %d\n", kase);
73         printf("Water level is %.2f meters.\n",high);
74         printf("%.2f percent of the region is under water.\n\n",percentage);
75     }
76     return 0;
77 }

猜你喜欢

转载自www.cnblogs.com/fudanxi/p/10348382.html