大榕树——让我们共成长!
大榕树 myDrs.org
您的位置:大榕树 \ 编程       |  Logo语言   |  Pascal语言   |  信息学奥赛   |  高考保送    |  HTML版本
|  信息学奥赛>>解题报告>>《镇长的烦恼》解题报告         本站全文搜索: 友情提示:

《镇长的烦恼》解题报告
http://www.mydrs.org  8/28/2001  大榕树


  这是一道基础题,在算法上并没有困难的地方,关键是要正确理解题意,抓住问题的本质。
  显而易见,站点的设置不超过两个,可以设N个站点不过是题目的障眼法。另外,由于两个村庄人数相等,因此站点的设置就只和距离有关,而和每村人数无关。年份的作用在于判断是平年还是闰年,从而计算出天数,为计算补贴奠定基础。由此,我们可以设计出算法的框架:

  计算出n年的总天数days。
  计算设置一个站的费用:cost1=days*t*length1*m+p*n
  计算设置两个站的费用:cost2=days*t*length2*m+p*2*n
  比较cost1和cost2的大小,选取较优的一个输出。

  从以上算法框架不难看出,问题的关键在与length1与length2的计算。分别考虑这两种情况:
  若只设置一个站点,那么有三种可能:

  C、D两点位于直线AB异侧(包括一点在线上),则length1=|CD|,站点设在直线AB与直线CD的交点上;
  C、D两点位于直线AB同侧,则length1=|C'D|,C'与C关于直线AB对称,站点设在直线AB与直线C'D的交点上;
  A、B、C、D四点共线,则length1=|CD|,站点设在线段CD上的任一点。
  若设两个站点,则length2=|CE|+|DF|,E、F分别是C、D在直线AB上的射影。

  下面说一说本题所要用到的一些公式:

  两点式:已知直线上两点(x1,y1),(x2,y2),则直线方程为

            (y1-y2)*x+(x2-x1)*y+x1*y2-x2*y1=0
  两点间距离公式:L=sqrt(sqr(x1-x2)+sqr(x2-x2))

  已知点(x1,y1),直线Ax+By+C=0,则点到直线距离
                d=|Ax1+By1+C|/sqrt(A*A+B*B)

  点(x1,y1)关于直线Ax+By+C=0的对称点(x2,y2)为:     
      x2=((b*b-a*a)*x1-2*a*b*y1-2*a*c))/(a*a+b*b)
      y2=((a*a-b*b)*y1-2*a*b*x1-2*b*c))/(a*a+b*b)

  直线A1x+B1y+C1=0与直线A2x+B2y+C2=0的交点(x,y)为
      x=(c1*b2-b1*c2)/(a1*b2-b1*a2)
      y=(a1*c2-c1*a2)/(a1*b2-b1*a2)

  有了以上算法与公式,看似颇为繁杂的一道题就被我们解决了。



作 者:孙林春
来 源:福州三中
共有1434位读者阅读过此文

  • 上篇文章《外公的难题》解题报告
  • 下篇文章《糊涂的记者》解题报告

  • 发送邮件
    保存页面 打印文章 HTML版本 发表评论

    □- 近期热门文章 □- 相关文章
    1. NOIP2006竞赛大纲 [8306]
    2. 七类高中生具有保送资格 [5910]
    3. NOI2006获奖选手名单 [4955]
    4. 关于举办NOIP2006模拟赛的通告 [4106]
    5. Turbo Pascal各语句运行速... [3594]
    6. Turbo王者归来新Delphi免费... [3181]
    7. IOI2006我国4名选手全部获得金... [2945]
    8. 关于APIO2007与IOI2007... [2763]
    9. noip倒计时 by 枯叶蝴蝶 [2683]
    10. 朱泽园:思想上的金牌更重要 [2168]
    SGOI第14次友谊赛成绩
    SGOI-14友谊赛测试数据
    SGOI14友谊赛试题
    SGOI第十三次友谊赛数据
    SGOI第13次友谊赛成绩揭晓
    SGOI第十三次友谊赛试题
    SGOI第13次友谊赛竞赛规则
    Sgoi12之《黑白瓷砖》
    《哈利·波特与魔法石》
    Sgoi12之《网络传输》
     

    关于本站 | 合作伙伴 | 联系方式
    大榕树 版权所有 ©1999-2006 www.myDrs.org 闽ICP备05000721号