【HDOJ-2552】三足鼎立——数学不是白学的

描述

MCA山中人才辈出,洞悉外界战火纷纷,山中各路豪杰决定出山拯救百姓于水火,曾以题数扫全场的威士忌,曾经高数九十九的天外来客,曾以一剑铸十年的亦纷菲,歃血为盟,盘踞全国各个要塞(简称全国赛)遇敌杀敌,遇佛杀佛,终于击退辽军,暂时平定外患,三人位置也处于稳态。

可惜辽誓不甘心,辽国征南大将军<耶律javac++>欲找出三人所在逐个击破,现在他发现威士忌的位置s,天外来客的位置u,不过很难探查到亦纷菲v所在何处,只能知道三人满足关系:

arctan(1/s)=arctan(1/u)+arctan(1/v)

定义 f(s,u,v)=v*u-s*u-s*v 的值为”三足鼎立”

<耶律javac++>想计算<三足鼎立>的值

输入

首先输入一个t,表示有t组数据,跟着t行:

输入s,u (s<=12^3;u<=2^20;s,u,v>0),s,u,v均为实数

输出

输出 v*u-s*u-s*v 的值,为了简单起见,如果是小数,直接取整

比如:答案是1.7,则输出1

分析

第一感觉,这题一定是个纯模拟,反正arctan是可以算的。

不过,仔细想过之后发现,这个题反而是用arctan好好的骗了我们一把——当你看到f(s,u,v) = v*u-s*u-s*v的时候是不是反映到了tan的运算法则呢?(没关系请尽情吐槽,我的数感一直都很可怕)

所以,我觉得这是一道数学题。

运算

中等数学告诉我们

tan(a+b)=(tan(a)+tan(b))/(1-tan(a)*tan(b)) (1)

tan(arctan(a))=a (2)

有了以上两个基本准则,我们针对arctan(1/s) = arctan(1/u)+arctan(1/v)进行推导:

tan(arctan(1/s))=tan(arctan(1/u)+arctan(1/v))

1/s=(1/u+1/v)/(1-1/u*v)

1/s-1/s*u*v=1/u+1/v

v*u-s*u-s*v=1

所以,我们居然推导出了这道题的结果直接为1!数感拯救世界!

代码


 C++ Code 
#include <stdio.h>



int main(int argc, const char * argv[]) {

    
int n, a, b;

    scanf(
"%d", &n);

    
while(n--) {

        scanf(
"%d %d", &a, &b);

        printf(
"1\n");

    }

    
return 0;

}

总结

数感拯救世界。假如还需要说什么别的,我觉得中等数学不是白学的。(所以我的高数简直是差劲的要死……)

ZHRMoe Studio 4/9/2015

发表评论

电子邮件地址不会被公开。 必填项已用*标注

28 + = 38