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-