【BZOJ】【1385】【Baltic2000】Division expression
欧几里得算法
普通的求个gcd即可……思路题
因为要求尽量是整数……所以 x1x2∗x3∗x4∗....∗xn是最大的结果了,因为x2必须为分母,x1必须为分子……x3 ~ xn可分子可分母,所以都丢到分子上,结果ans为整数的可能性最大=。=因为如果放下去相当于 ansx2i 嗯……应该很好理解- -

1 /************************************************************** 2 Problem: 1385 3 User: Tunix 4 Language: C++ 5 Result: Accepted 6 Time:120 ms 7 Memory:1664 kb 8 ****************************************************************/ 9 10 //BZOJ 1385 11 #include<cstdio> 12 #include<cstring> 13 #include<cstdlib> 14 #include<iostream> 15 #include<algorithm> 16 #define rep(i,n) for(int i=0;i<n;++i) 17 #define F(i,j,n) for(int i=j;i<=n;++i) 18 #define D(i,j,n) for(int i=j;i>=n;--i) 19 using namespace std; 20 int getint(){ 21 int v=0,sign=1; char ch=getchar(); 22 while(ch<'0'||ch>'9'){ if (ch=='-') sign=-1; ch=getchar();} 23 while(ch>='0'&&ch<='9'){ v=v*10+ch-'0'; ch=getchar();} 24 return v*=sign; 25 } 26 /******************tamplate*********************/ 27 int x[100086]; 28 inline int gcd(int a,int b){return b==0 ? a : gcd(b,a%b);} 29 int main(){ 30 int T=getint(); 31 while(T--){ 32 int n=getint(); 33 F(i,1,n) x[i]=getint(); 34 x[2]/=gcd(x[2],x[1]); 35 F(i,3,n){ 36 x[2]/=gcd(x[2],x[i]); 37 if (x[2]==1) {puts("YES");break;} 38 } 39 if (x[2]!=1) puts("NO"); 40 } 41 return 0; 42 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步