• Flooded! UVA


      第一次看这道题的时候是在一个月前,那个时候读题用了好几天(是的,好几天T_T),读完了用自己的理解怎么也没法解释样例数据,就没做了,现在又看一次,还是以前的理解来带数据。。。。竟然对到了(我去!估计以前看了假题目->_->)。。。然后用了大概一小时写代码(好吧,挺慢的。。),第一次交的时候对临界数据处理几乎没有,所以还是没啥信心就想着交交试试,结果竟然一次a,还是蛮激动的,嘿嘿。。,后来看了代码量,还好没上千,就没怎么改。。

      题目意思是给你一个地区平面图,这个地区被分为m*n个方格,并告诉你每一个方格海拔高度(有正负),然后告诉你这个地区的总降水量,雨水先从低海拔到高海拔填满,求最后水的高度和水下方格数量所占的百分比。

      思路:用一维数组保存所有的高度,然后从小大排序,然后用水把第i(i初始为0)高的方块补为与第(i+1)高的方块的高度相同,水量同时减少,直到水不够。

      代码如下

      

    #include <string.h>
    #include <stdio.h>
    #include <iostream>
    #include <stdlib.h>
    #include <algorithm>
    using namespace std;

    int main()
    {
    int squ[1000];
    int water;
    int m, n, order = 0;
    while(scanf("%d%d", &m, &n) != EOF && m && n)
    {
    order++;
    for(int i = 0; i < m*n; i++)
    scanf("%d", &squ[i]);
    sort(squ, squ + m*n);
    scanf("%d", &water);
    int i;
    for(i = 0; i < m*n - 1; i++)
    {
    int diff = squ[i+1] - squ[i];
    int num = water - diff * 100 * (i+1);
    if(num <= 0)break;
    else water = num;
    }
    float high_water, percent;
    high_water = squ[i] + (float)water / (100 * (i+1));
    percent = (float)(i+1) / (m*n) * 100;
    printf("Region %d ", order);
    printf("Water level is %.2f meters. ", high_water);
    printf("%.2f percent of the region is under water. ", percent);
    }
    return 0;
    }

    紫书特意强调这道题的多解性,然而也没想到其他方法,看vj上其他人的也都差不多,也有不同的,大概思路就是把低海拔的方块都换成水,水量也相应增加,如果水量还是小于高海拔,就停止循环,得到了低于水高度的方块的数量,水临界方块的处理也类似,不过觉得还是没什么区别,也就没用这种方法试。。。

    做题反思:又是一道看懂了题就没多大问题的题目,(英语硬伤,心累T_T),时间还是用得太久了,就算有思路,不算复杂的题也要用上一小时,嗯~ o(* ̄▽ ̄*)o 还是要多练。

    print “ 欢迎来到渣小狼的博客,这既是博客,也是日记,里面记录了小狼的学习经历还有一些小狼的见解,非常希望每一个来到这里的人能够留下只言片语,更加的希望留下的是对于小狼的不足的补充,谢谢(*^__^*) 嘻嘻……”
  • 相关阅读:
    SQL Server数据库开发基础
    C#面向对象的概念 ----继承,里氏转换和几种集合(2)
    C#面向对象的概念 ----继承,里氏转换和几种集合(1)
    C#面向对象的概念
    C#的引用类型及stringbuilder类(增补)
    C#方法构建的简单介绍
    C#的结构和数组
    C#debug技巧和反编译器
    C#的语法----程序结构(6)
    C#的语法----程序结构(5)
  • 原文地址:https://www.cnblogs.com/wolf-yasen/p/6293381.html
Copyright © 2020-2023  润新知