• COGS 2188. [HZOI 2015] Math 题解


     

    题目描述:

    给定n个数X1-Xn,求下面式子的值(整数部分):

    n<=107,xi<=109且互不相同。

    分析:

    其实一开始看见这道题我也吓傻了,k这么大,再说我又是数论鶸渣,打死也不会= =

    后来看了各路神犇的题解,又仔细想了想,大概明白了。

    首先,k这么大,已经不是高精乘和高精开方所能承受的了(当然,你也可以找个超级计算机算算试试)

    所以我们可以把k视为∞(INF)。

    极限思想,由于xi互不相同,所以每个元素在比它稍微大一点点的数面前都是微乎其微,不会影响到整数部分的。

    (可以粗略验证,=101001e+100,9100=2.6561398887587476933878132203578e+95,差了5个数量级,在10100  面前9100可以忽略不计(毕竟只取整数嘛))

    (或者直接算,100√10100 + 9100=10.00000265610496673245179467499,整数部分还是10

    也就是说,在k=INF的情况下,上述式子的整数部分即为

    max{xi

    这么分析过后,题目就迎刃而解了。

    贴出c++参考代码:(0.388 s,0.14 MB)

    #include<cstdio>
    int MAIN();
    int n,temp=0,x=MAIN();
    inline void read(int &x){//不用快读是上不了榜的
    	x=0;int c=getchar();
    	while(c<'0'||c>'9')c=getchar();
    	for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+(c^48);
    	return;
    }
    int main(){;}
    inline int MAIN(){//减小常数,闲的没事者专用
    	freopen("math.in","r",stdin);
    	freopen("math.out","w",stdout);
    	read(n);
    	for(int i=0;i<n;i++){
    		read(x);
    		if(x>temp)temp=x;
    	}
    	return printf("%d",temp);
    }
    
    233333333
  • 相关阅读:
    央企国管公积金提取。本人实际经历 2013年6月5日
    一台机器开启多个tomcat7 绿色版
    给Repeater、Datalist和Datagrid增加自动编号列
    有关比较分析的MDX
    01[转Cognos8第三讲]Cognos8的安装与配置
    BI前端工具对比
    转摘cognos学习笔记
    04[转Cognos8第四讲]权限配置(2)
    如何更改oracle字符集
    IBM Cognos BI 最佳实践: 定制 IBM Cognos 8 UI
  • 原文地址:https://www.cnblogs.com/hzoier/p/5327636.html
Copyright © 2020-2023  润新知