标签:注意 嵌入 temp scan cstring 问题 gcd ret 题目
lucas:
T2:
给你一个除法表达式:X1/X2/X3/X4……/Xk 其中Xi是正整数并且 Xi <= 2 000 000 000( 1<=i<=k,k<=10 000 )。除法表达式应当按照从左到右的顺序求结果,例如:表达式1/2/1/2的值是1/4,你可以在表达E中嵌入括号改变计算顺序,例如表达式(1/2)/(1/2)的值是1。现在给你一个除法表达式E,计算是否能够通过加括号(或者不加)得到表达式E‘ ,E‘的值为整数。
输入数据包括多组数据,每组数据占一行,给出的是题目描述的表达式E,E中不含空格。
每组测试数据占一行如果能找到题目中描述的E‘ 则输出"YES"(不含引号),否则输出"NO" (不含引号)。
1/2/1/2
2/3
YES
NO
时间限制:1s
空间限制:128MB
思路 :第二个放在分母上,其他的都可以放在分子上。。。超int。。。
std:
#include<cstdio> #include<cstring> #include<algorithm> #define LL long long using namespace std; const int maxn=1e4+5; char ch[maxn*15]; int a[maxn],temp,k; inline int read(){ int a=0; while(ch[temp]<‘0‘||‘9‘<ch[temp])temp++; while(‘0‘<=ch[temp]&&ch[temp]<=‘9‘){ a=(a<<1)+(a<<3)+ch[temp++]-‘0‘; } return a; } int main(){ while(scanf("%s",ch+1)>0){ int len=strlen(ch+1); temp=1;k=0; for(int i=1;ch[temp]!=‘\0‘;i++,k++){ a[i]=read(); //printf("%d ",a[i]); } for(int i=1;i<=k;i++){ if(i!=2){ int d=__gcd(a[i],a[2]);//使用gcd约分,注意别超int。。。 a[2]/=d;//第二个数一定是分母 } } printf(a[2]==1?"YES\n":"NO\n"); } return 0; }
标签:注意 嵌入 temp scan cstring 问题 gcd ret 题目
原文地址:https://www.cnblogs.com/a-blog-of-taojiayi-2003/p/11072943.html