T2实际上是一道数学题,由于你看:优化
2MB??一共就能够存下个int,然鹅再看数据范围:
spa
那么大是稳稳的不是TLE就是MLE了,因此确定是数学题,并且是只须要存不多数据的数学题。因此咱们也不知道该怎么办了,而后lz平常开始考场上的打表找规律:3d
样例#1: 样例#2:
可是如今看并无什么规律可言,而后咱们在本身搞几个数据试试:code
咱们发现,x在减完后最后都会变成同样的数,这个数有什么规律呢?定睛一看,实际上是输入的全部x的最大公约数!blog
偷走wz证实:get
因此咱们就能够大胆猜测了:求出x1~xn的最大公约数,而后*n就是答案(固然确实是这样的),求最大公约数,能够用gcd来求:数学
int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b); }
而后咱们也没必要把全部的x都存下来,只须要记录一个x,以及当前全部输入了的x的最大公约数gcdd就能够啦(而后悄咪咪的小优化:当gcdd=1时就能够不用往下求了,不过好像并快不了几毫秒)it
CODE:ast
#include<bits/stdc++.h> using namespace std; inline int read(){ int ans=0; char last,ch=getchar(); while(ch<'0'||ch>'9') last=ch,ch=getchar(); while(ch>='0'&&ch<='9') ans=(ans<<3)+(ans<<1)+ch-'0',ch=getchar(); if(last=='-') ans=-ans; return ans; } int n,x,gcdd; long long ans; int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b); } int main(){ n=read(); for(int i=1;i<=n;i++){ x=read(); gcdd=gcd(gcdd,x); if(gcdd==1) break; } ans=gcdd*n; printf("%lld",ans); return 0; }
end-