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 }
分类:
OJ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步