20110805 组队赛 f题

Description

阿里巴巴又一次来到了灯神藏身的山洞,洞口一如既往地被一个巨大的石门关着。但是无论阿里巴巴怎样大喊“芝麻开门”,石门都纹丝不动。原来由于阿里巴巴不断地求灯神办事儿,灯神觉得烦了,于是灯神对石门施了魔法,使石门换了一种打开方式。灯神在石门上写了一个数学表达式:
 X1/X2/X3/X4……/XN  (/表示除号)
        并在下面写了几行提示:
        添加适当的括号,当表达式的值为整数时,大门将为你敞开。
    阿里巴巴自觉能力不足,于是找来了你帮他打开这道石门,你能做到吗?

Input

测试数据有多组,对于每组数据,第一行为一个整数N(1<=n<=10000),表示表达式中数字的个数,其后的第i+1行每行有一个整数表示Xi的值(1<=i<=N)。(1<=Xi<=1000000000)

Output

对于每组数据,如果你能帮阿里巴巴打开石门,输出YES,否则输出NO。

Sample Input

58421143579

Sample Output

YESNO

这是刘汝佳黑书上面的一道例题~

关键是看x2~因为其他的数在加括号之后都可以变成分子~只有x2只能做分母~

将除了x2之外的数全变为分子~即x1/(x2/x3/......../xn)=(x1*x3/x4/......./xn)/x2~

则只要当x2能被整除消去时~整个式子结果就为整数~

则只需要从x1~x3~x4......xn~一个个与x2求最大公约数~x2约去这些数~最后x2完全消去即可~

其实这题和d题一样~稍稍改改就行~

#include"iostream"
#include"queue"
using namespace std;
long aa(long a1,long a2)
{	
	long b1,b2;
	long c=1;
	queue<long>Que;
	Que.push(a1);
	Que.push(a2);
	while(c!=0)
	{
		b1=Que.front();
		Que.pop();
		b2=Que.front();
		c=b1%b2;
		Que.push(c);
	}
	return b2;
}


int main()
{
	long i;
	queue<long>bb;
	long n;
	long temp;
	long a1,a2;
	while(cin >> n)
	{
		cin >> temp;
			bb.push(temp);
		cin >> a1;
		for(i=0;i<n-2;i++)
		{
			cin >> temp;
			bb.push(temp);
		}
		while(!bb.empty())
		{
			a2=bb.front();
			bb.pop();
			a1=a1/aa(a1,a2);	
		}
		if(a1==1)
		cout <<"YES"<<endl;
		else
		cout <<"NO"<<endl;	
	}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值