NYOJ 1013 除法表达式(欧几里德算法+唯一分解定理)
题目链接:
http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1013
- 描述
-
给出一个这样的除法表达式:X1/X2/X3/···/Xk,其中Xi是正整数。除法表达式应当按照从左到右的顺序求和,例如表达式1/2/1/2的值为1/4。但是可以在表达式中嵌入括号以改变计算顺序,例如表达式(1/2)/(1/2)的值为1.
- 输入
- 首先输入一个N,表示有N组测试数据,
每组数据输入占一行,为一个除法表达式,
输入保证合法。
使表达式的值为整数。k<=10000,Xi<=100000000. - 输出
- 输出YES或NO
- 样例输入
-
1
1/2/1/2 - 样例输出
-
YES
/*
问题
给出一个除法表达式x1/x2/x3/.../xk,其中xi是正整数,问能够通过在表达式中嵌入括号以改变计算顺序,使得表达式的值为1 解题思路
直观的想法暴力,但是随即又想暴力的方法是不行的,因为嵌入括号可以是双重嵌套的。
看了解析,先将式子变成E=x1/x2/x3/.../xk=(x1/x3/.../xk)/x2,现在的问题变成了判断E是否为整数
采用直接约分,那么每次约掉xi和x2的最大公约数,最后看x2是否为1即可。
这类题目刚开始看的时候好像无从下手,但是仔细观察将式子经过适当的变型,就可以将问题转化成熟悉的问题,进而求解。 具体解法,采用scanf将表达式读入,预处理(将'/'变成' ')后将其赋值为一个string类,再采用流式一个一个读入数字存入x,经过判断
输出对应结果即可。 易错分析,刚开始读入的时候以为都是一位数的数字,后来猛地发现可以是多位数字,这种错误真的是,多读题很重要。
*/
#include<cstdio>
#include<cstring>
#include<string>
#include<cctype>
#include<vector>
#include<iostream>
#include<sstream>
using namespace std; const int N=;
char s[N];
int x[N]; int judge(int *x,int len);
int gcd(int a,int b){
return b==?a:gcd(b,a%b);
}
int lcm(int a,int b){
return a/gcd(a,b)*b;
} vector<int> vx;
string vs;
int main()
{
int T,len,i,j,k,vxx;
scanf("%d",&T);
while(T--){
scanf("%s",s);
len=strlen(s);
for(i=;i<len;i++){
if(s[i] == '/')
s[i] = ' ';
}
vs=s;
stringstream ss(vs);
j=;
while(ss >> vxx) x[j++]=vxx; /*for(i=0;i<j;i++)
printf("%d ",x[i]);
printf("\n");*/ if(judge(x,j))
printf("YES\n");
else
printf("NO\n");
}
return ;
} int judge(int *x,int len)
{
x[] /= gcd(x[],x[]);
for(int i=;i<len;i++)
x[] /= gcd(x[i],x[]);
return x[] == ;
}
NYOJ 1013 除法表达式(欧几里德算法+唯一分解定理)的更多相关文章
- UVa10375:选择与除法(唯一分解定理)
The binomial coefficient C(m,n) is defined as Given four natural numbers p, q, r, and s, compute the th ...
- B - Common Divisors (codeforces)数论算法基本定理,唯一分解定理模板
You are given an array aa consisting of nn integers. Your task is to say the number of such positive ...
- NYOJ-1013除法表达式
除法表达式 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 给出一个这样的除法表达式:X1/X2/X3/···/Xk,其中Xi是正整数.除法表达式应当按照从左到右的顺 ...
- 欧几里德算法及其扩展(推导&&模板)
有关欧几里德算法整理: 1.一些相关概念: <1>.整除性与约数: ①一个整数可以被另外一个整数整除即为d|a(表示d整除a,通俗的说是a可以被d整除),其含义也可以说成,存在某个整数k, ...
- codeforces C. Primes and Multiplication(快速幂 唯一分解定理)
题目链接:http://codeforces.com/contest/1228/problem/C 题解:给定一个函数f,g,题目有描述其中的表达式含义和两者之间的关系. 然后计算: 首先把给定的x用 ...
- Sicily1099-Packing Passengers-拓展欧几里德算法
最终代码地址:https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1099.c 做这题的时候查了别人的做法花了半天都没 ...
- 欧几里德算法gcd及其拓展终极解释
这个困扰了自己好久,终于找到了解释,还有自己改动了一点点,耐心看完一定能加深理解 扩展欧几里德算法-求解不定方程,线性同余方程. 设过s步后两青蛙相遇,则必满足以下等式: (x+m*s)-(y+n ...
- hdu1215 正整数唯一分解定理应用
B - (例题)因子和 Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64 ...
- POJ - 1845 G - Sumdiv (唯一分解定理)
Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S m ...
随机推荐
- 数组中超过N分之一的数字
寻找数组中超过一半的元素,这是一道十分经典和普遍的面试题了,实现起来比较容易,只是需要写技巧,将问题扩展就可以衍生到求数组中几个超过N分一的元素,例如找出数组中3个出现次数超过1/4的元素. /*** ...
- spring boot 整合 mybatis 以及原理
同上一篇文章一样,spring boot 整合 mybatis过程中没有看见SqlSessionFactory,sqlsession(sqlsessionTemplate),就连在spring框架整合 ...
- Handle( )
Handle( ) //得到PB窗口型对象的句柄 功 能:得到PB窗口型对象的句柄.使用该函数可以得到应用对象.窗口或控件的句柄,但不能得到绘图对象的句柄. 语 法:Handle ( object ...
- OmniThreadLibrary学习笔记
http://blog.sina.com.cn/s/articlelist_1157240623_6_1.html 非常好的控件,仔细看
- Sql递归关联情况,With作为开头条件。
with Test_Recursion(Id,ParentId)AS(select Id,ParentId from [V_KPI_DetailsActivities] where ParentId ...
- [leetcode 14]Longest Common Prfix
1 题目: Write a function to find the longest common prefix string amongst an array of strings. Hide Ta ...
- HttpWebRequest 跳转后(301,302)ResponseUri乱码问题
问题: 目标地址: http://www.baidu.com/baidu.php?url=a000000aa.7D_ifdr1XkSUzuBz3rd2ccvp2mFoJ3rOUsnx8OdxeOeOL ...
- day02 基本数据类型与运算符
day02 1.基本数据类型 2.算术运算符 +,-,*,/,%,++,-- 3.赋值运算符 =,+=,-=,*=,/=,%= 4.关系运算符 +=,-=,*=,/=,%= 结果是boolean类型 ...
- mysql 存储过程 游标嵌套
基本表temp 包括 name, type, sendCity, getCity 分别对应物流送货司机名, 倒车的第几段, 发货城市, 收货城市 表结构 -- -------------------- ...
- Linux链接脚本学习--lds(转)
Linux链接脚本学习--lds 一.概论 ld: GNU的链接器. 用来把一定量的目标文件跟档案文件链接在一起,并重新定位它们的数据,链接符号引用. 一般编译一个程序时,最后一步就是运行ld进行链接 ...