COGS 2188. [HZOI 2015] Math 题解

时间:2024-12-30 09:32:56
 

题目描述:

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

COGS 2188. [HZOI 2015] Math 题解

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);
}