codeforces 552 C Vanya and Scales

这个题的意思就是给出一个数m。以及一个以1为首元素。w为比例常数的等比数列,数列长度为101,数列中每一个数字最多仅仅能用一次。问是否存在xa+wb+……=wc+wd+……+we+m。

非常显然,换句话说就是问,是否存在m=wa+wb+……+wf-wc-wd-……-we。再进行化简就能够得到。是在问,是否存在m=((((wh±1)wi±1)±1)wj±1)wk……。

那么非常显然可以进行搜索,比方说用广搜,每次当前的m±1中若有因子w就所有约掉,然后丢到队列中,否则就不用管,仅仅要队列中可以出现1,那么这样的情况就是存在的。反之就是不存在。

#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#include<bitset>
#include<climits>
#include<list>
#include<iomanip>
#include<stack>
#include<set>
using namespace std;
int cnt(int w,int x)
{
	while(x%w==0)
		x/=w;
	return x;
}
queue<int>qq;
bool bfs(int w,int m)
{
	int t=cnt(w,m);
	if(t!=m)
		qq.push(t);
	else
		qq.push(m);
	while(qq.size())
	{
		t=qq.front();
		qq.pop();
		if(t==1)
			return 1;
		int t1=cnt(w,t+1);
		if(t1!=t+1)
			qq.push(t1);
		t1=cnt(w,t-1);
		if(t1!=t-1)
			qq.push(t1);
	}
	return 0;
}
int main()
{
	int w,m;
	cin>>w>>m;
	if(bfs(w,m))
		puts("YES");
	else
		puts("NO");
}

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Vanya has a scales for weighing loads and weights of masses w0,?w1,?w2,?...,?w100 grams
where w is some integer not less than 2(exactly
one weight of each nominal value). Vanya wonders whether he can weight an item with mass m using the given weights, if the weights
can be put on both pans of the scales. Formally speaking, your task is to determine whether it is possible to place an item of mass m and
some weights on the left pan of the scales, and some weights on the right pan of the scales so that the pans of the scales were in balance.

Input

The first line contains two integers w,?m (2?≤?w?≤?109, 1?≤?m?≤?109)
— the number defining the masses of the weights and the mass of the item.

Output

Print word ‘YES‘ if the item can be weighted and ‘NO‘
if it cannot.

Sample test(s)

input

3 7

output

YES

input

100 99

output

YES

input

100 50

output

NO

Note

Note to the first sample test. One pan can have an item of mass 7 and a weight of mass 3,
and the second pan can have two weights of masses 9 and 1,
correspondingly. Then 7?+?3?=?9?+?1.

Note to the second sample test. One pan of the scales can have an item of mass 99 and the weight of mass 1,
and the second pan can have the weight of mass 100.

Note to the third sample test. It is impossible to measure the weight of the item in the manner described in the input.

时间: 2024-10-08 11:31:24

codeforces 552 C Vanya and Scales的相关文章

codeforces 552 E Vanya and Brackets

题意是这样,给出一个运算符只有+跟*,数字都在1到9之间的算式,要你加入一对括号,使得算式的结果尽可能的大,保证最多十五个乘号. 很显然,若要让加入的括号能够影响原本运算的结果,必然是要影响乘法,那么加入的这对括号中必然至少有一个跟乘号是相邻的,恰好乘号的数目很小,那么直接枚举括号的位置即可,每次算出当前解更新ans即可. #include<map> #include<string> #include<cstring> #include<cstdio> #i

CodeForces 552C Vanya and Scales

Vanya and Scales Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 552C Description Vanya has a scales for weighing loads and weights of masses w0, w1, w2, ..., w100 grams where w is some

暴力/进制转换 Codeforces Round #308 (Div. 2) C. Vanya and Scales

题目传送门 1 /* 2 题意:问是否能用质量为w^0,w^1,...,w^100的砝码各1个称出重量m,砝码放左边或在右边 3 暴力/进制转换:假设可以称出,用w进制表示,每一位是0,1,w-1.w-1表示砝码与物品放在一起,模拟判断每位是否ok 4 详细解释:http://blog.csdn.net/u011265346/article/details/46556361 5 总结:比赛时压根没往进制去想,连样例也不知道是怎么回事..中文不行啊:( 6 */ 7 #include <cstdi

codeforces C. Vanya and Scales

C. Vanya and Scales Vanya has a scales for weighing loads and weights of masses w0, w1, w2, ..., w100 grams where w is some integer not less than 2(exactly one weight of each nominal value). Vanya wonders whether he can weight an item with mass m usi

Codeforces 552C Vanya and Scales(进制转换+思维)

题目链接:http://codeforces.com/problemset/problem/552/C 题目大意:有101个砝码重量为w^0,w^1,....,w^100和一个重量为m的物体,问能否在天平两边放物品和砝码使其平衡.解题思路:将m化为w进制的数,接下来从低到高遍历没一位:如果第i位是0那OK:如果是1那就要把砝码wi放在天平另一边抵消:如果是w-1那就要把砝码wi放到天平同一边,使其变为0并进位,这时第i+1位的权+1:而如果是其他情况,那么肯定不能平衡了. 代码: 1 #incl

Codeforces 552C Vanya and Scales(思路)

题目大概说有101个质量w0.w1.w2.....w100的砝码,和一个质量m的物品,问能否在天平两边放物品和砝码使其平衡. 哎,怎么没想到..注意到w0.w1.w2.....w100—— 把m转化成w进制数,枚举每一位: 如果第i位是0那OK: 如果是1那就要把砝码wi放在天平另一边抵消: 如果是w-1那就要把砝码wi放到天平同一边,使其变为0并进位,这时第i+1位的权+1: 而如果是其他情况,那么肯定不能平衡了. 1 #include<cstdio> 2 #include<cstri

codeforces 552 第一次能全做出来DIV2流下了感动的泪水....

#include <iostream> #include <cstdio> using namespace std; /*B*/ /*注意要开长整型.........没别的说的*/ /* int main() { long long int m; scanf("%lld",&m); if(m<10) {printf("%d\n",m);return 0;} long long int n=m; int q=0; while(n)

#308 (div.2) C. Vanya and Scales

1.题目描述:点击打开链接 2.解题思路:本题可以事先进行一下简单的数学推导解决.实际上要满足的等式就是如下的式子: a0*w^0+a1*w^1+a2*w^2+...+an*w^n=m 上式中,所有的ai均应该是{0,1,-1}中其中一个数,这样推导之后,大致的解题思路便浮出水面了.就是不断地以w取模,然后m/=w,看余数是否满足条件即可.不过这里还要多深入思考一点,首先不难发现,如果w≤3,那么必然满足题意:当w>3时,由于模运算不会出现余数为-1的情况,可以是w-1,所以这时m除以w后要加上

6月好题记录

Codeforces 1166C A Tale of Two Lands [绝对值问题]给定一个数列,求其中满足\(min{|x+y|,|x-y|} \leq min{|x|,|y|}\)且\(max{|x|,|y|} \leq max{|x+y|,|x-y|}\)的数对\((x,y)\)个数. \(x,y\)的符号都需要分类讨论,好像有点复杂.事后明白了符号在这道题里是不影响的. 我们可以这样来考虑.对于两个正数\(x,y(x<y)\),如果仅改变符号不会影响\(|x+y|\)和\(|x-y|