「BZOJ1385」「Baltic2000」Division expression 解题报告
Division expression
Description
除法表达式有如下的形式: \(X_1/X_2/X_3.../X_k\) 其中Xi是正整数且\(X_i \le 1000000000(1 \le i \le k,K \le 10000)\) 除法表达式应当按照从左到右的顺序求,例如表达式1/2/1/2的值为1/4.但可以在表达式中加入括号来改变计算顺序,例如(1/2)/(1/2)的值为1.现给出一个除法表达式E,求是告诉是否可以通过增加括号来使其为E',E'为整数。
Input
先给出一个数字D,代表有D组数据. 每组数据先给出一个数字N,代表这组数据将有N个数。 接下来有N个数
Output
如果能使得表达式的值为一个整数,则输出YES.否则为NO
Sample Input
2
4
1
2
1
2
3
1
2
3
Sample Output
YES
NO
思路
观察这个式子\(E = X_1 / X_2 / X_3 .... / X_n\)
我们设\(E' = X_{a1} * X_{a2}..../ X_{b1} / X_{b2}....\)
即把加括号后的式子改成分数线的形式,有一些元素属于分子,其他的元素属于分母。
我们发现:
- \(X_1\) 不得不在分子 没有为什么 就是不可以
- \(X_2\) 不得不在分母 因为你想让它去分母它也不可能到分母
- \(X_3 \ to \ X_n\) 可在分子也可在分母 总是有办法的QAQ
如果叫你把\(X_3 \ to \ X_n\)分一部分在分子,其他的在分母,你会怎么做?? 当然是把全部元素放在分子呗。。。
因此最优的 \(E' = X_1 * X_3 * X_4....* X_n / X_2\)
如果真的乘起来的话肯定会溢出,所以当然要用GCD。
清爽的30行代码$(~ ̄▽ ̄)~ $
代码
#include<cstdio>
using namespace std;
#define MAXN 10005
int T;
int n, t, s;
int gcd( int x, int y ){
    return x % y == 0 ? y : gcd( y, x % y );
}
int main(){
    scanf( "%d", &T );
    while( T-- ){
        scanf( "%d", &n );
        scanf( "%d", &t );
        if ( n == 1 ){//注意特判
            printf( "YES\n" ); continue;
        }
        scanf( "%d", &s );
        s /= gcd( s, t );
        for ( int i = 3; i <= n; ++i ){
            scanf( "%d", &t );
            s /= gcd( s, t );
        }
        if ( s == 1 ) printf( "YES\n" );
        else printf( "NO\n" );
    }
    return 0;
}
「BZOJ1385」「Baltic2000」Division expression 解题报告的更多相关文章
- 「SHOI2016」黑暗前的幻想乡 解题报告
		「SHOI2016」黑暗前的幻想乡 sb题想不出来,应该去思考原因,而不是自暴自弃 一开始总是想着对子树做dp,但是状态压不起去,考虑用容斥消减一些条件变得好统计,结果越想越乱. 期间想过矩阵树定理, ... 
- 「ZJOI2015」地震后的幻想乡 解题报告
		「ZJOI2015」地震后的幻想乡 想了半天,打开洛谷题解一看,最高票是_rqy的,一堆密密麻麻的积分差点把我吓跑. 据说有三种解法,然而我只学会了一种最辣鸡的凡人解法. 题意:给一个无向图\(G\) ... 
- 「SCOI2014」方伯伯的玉米田 解题报告
		#2211. 「SCOI2014」方伯伯的玉米田 发现是取一个最长不下降子序列 我们一定可以把一个区间加的右端点放在取出的子序列的最右边,然后就可以dp了 \(dp_{i,j}\)代表前\(i\)个玉 ... 
- 「洛谷P1306」斐波那契公约数 解题报告
		P1306 斐波那契公约数 题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很"简单"问题:第n项和第m项的最大公 ... 
- 「洛谷P2397」 yyy loves Maths VI (mode) 解题报告
		P2397 yyy loves Maths VI (mode) 题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居 ... 
- 「USACO11NOV」牛的障碍Cow Steeplechase 解题报告
		题面 横的,竖的线短段,求最多能取几条没有相交的线段? 思路 学过网络流的童鞋在哪里? 是时候重整网络流雄风了! 好吧,废话不多说 这是一道最小割的题目 怎么想呢? 要取最多,那反过来不就是不能取的要 ... 
- 「Luogu P2508」[HAOI2008]圆上的整点 解题报告
		题面 给定圆的半径,求圆上整点数 这是一道很Nice的数学题!超爱!好吧,由于这道题,我去Study了一下复数(complex number)复杂的数 真棒!!! 有兴趣的戳这里!!!\(\huge ... 
- 【BZOJ】【1385】【Baltic2000】Division expression
		欧几里得算法 普通的求个gcd即可……思路题 因为要求尽量是整数……所以 $\frac{x_1}{x_2*x_3*x_4*....*x_n}$是最大的结果了,因为$x_2$必须为分母,$x_1$必须为 ... 
- 「kuangbin带你飞」专题十四 数论基础
		layout: post title: 「kuangbin带你飞」专题十四 数论基础 author: "luowentaoaa" catalog: true tags: mathj ... 
随机推荐
- 微博第三方登录时,域名使用错误报错, Laravel \ Socialite \ Two \ InvalidStateException No message
			使用微博第三方登录时,报错 Laravel \ Socialite \ Two \ InvalidStateException No message Laravel \Socialite \Two \ ... 
- uva 11754 Code Feat (中国剩余定理)
			UVA 11754 一道中国剩余定理加上搜索的题目.分两种情况来考虑,当组合总数比较大的时候,就选择枚举的方式,组合总数的时候比较小时就选择搜索然后用中国剩余定理求出得数. 代码如下: #includ ... 
- linux lvm删除导致无法启动
			要想编辑/etc/fstab文件,我们需要在系统中重新挂载根目录,使其具有可读写状态,使用如下命令: mount -o remount,rw / 该条命令的作用是,以可读写的形式重新挂载根分区. 然后 ... 
- [转]cron表达式的用法
			cron表达式通过特定的规则指定时间,用于定时任务,本文简单记录它的部分语法和实例,并不完全,能覆盖日常大部分需求. 1. 整体结构 cron表达式是一个字符串,分为6或7个域,每两个域之间用空格分隔 ... 
- Codeforces Round #180 (Div. 1 + Div. 2)
			A. Snow Footprints 如果只有L或者只有R,那么起点和终点都在边界上,否则在两者的边界. B. Sail 每次根据移动后的曼哈顿距离来判断是否移动. C. Parity Game 如果 ... 
- laravel安装intervention/image图像处理扩展 报错 intervention/image 2.3.7 requires ext-fileinfo
			在安装intervention/image图像处理扩展 报错fileinfo is missing 报错信息如下: \blog>composer require intervention/ima ... 
- mysql 第一课 win7艰难的配置与删除注册表重新安装
			mysql 这个安装一定要慎重!慎重!慎重! 重要的事情说三遍.. 不会的一定要按步骤来~出错了真的很难受. 详细教程 --> https://jingyan.baidu.com/album/ ... 
- js 页面分享
			首先说分享到QQ空间的通用代码:<a href="javascript:void(0);" onclick="window.open('http://sns.qzo ... 
- 2019-10-24-dotnet-列表-Linq-的-Take-用法
			title author date CreateTime categories dotnet 列表 Linq 的 Take 用法 lindexi 2019-10-24 9:4:23 +0800 201 ... 
- spring security (BCryptPasswordEncoder)加密及判断密码是否相同
			通过BCryptPasswordEncoder的加密的相同字符串的结果是不同的,如果需要判断是否是原来的密码,需要用它自带的方法. 加密: BCryptPasswordEncoder encode = ... 
