神奇的树

神奇的树

Time Limit: 1000MS Memory limit: 65536K

题目描述

SDUT有一颗神奇的苹果树。假如某天早上这树上有x个苹果,那么这树这一天会再结出x个苹果来,也就是说到了晚上会有2*x个苹果,到了深夜,会有专人人来摘苹果,而摘苹果的人总会使苹果数剩下当前数量对m的余数,也就是说假如当前数量为a,那么第二天早上会剩下a%m个苹果。也许聪明的你已经发现了,有可能从某一天开始,这棵树上就再也没有苹果了。那么给你第一天早上的苹果数,请你判断一下是否存在这一天,从这一天开始就再也没有苹果了。如果一直存在的话输出Yes,否则输出No。

输入

多组测试数据。每组测试数据都是一行两个整数,x和m。x表示第一天早上的

苹果树,m表示余数。1<=x,m<=10^5.

输出

每组测试数据输出单独一行,Yes或No。

示例输入

1 5
3 6

示例输出

No
Yes

题意: 假如早上苹果的数量为a,这一天会再结出a个苹果,到了晚上会有2a个,那么第二天早上会剩下2a%m个苹果,问是否有可能早上的苹果的数目会为0,也就是说被摘了。如果可以被摘了,则输出Yes,否则输出No。
 1 #include<stdio.h>
 2 #include<string.h>
 3 int s[1001000];
 4 int main()
 5 {
 6     int n, m, flag;
 7     while(~scanf("%d%d", &n, &m))
 8     {
 9         memset(s, 0, sizeof(s));
10         n = n*2;
11         flag = 0;
12         while(!s[n%m])
13         {
14             s[n%m]=1;
15             n = n%m;
16             n = n*2;
17             if(n%m==0)
18             {
19                 printf("Yes\n");
20                 flag = 1;
21                 break;
22             }
23         }
24         if(flag) continue;
25         printf("No\n");
26     }
27     return 0;
28 }  
时间: 2024-08-09 18:22:49

神奇的树的相关文章

《啊哈!算法》第7章 神奇的树

第3节 堆排序 把n个元素建立一个堆,首先将这n个结点以自顶向下.从左到右的方式从1到n编码,这样可以把n个结点转换成一颗完全二叉树 紧接着从最后一个非叶子结点(结点编号为n/2)开始到根节点(结点编号为1),逐个扫描所有结点,根据需要将当前结点向下调整,直到以当前结点为根结点的子树符合堆的特性. #include <iostream> #include <vector> #include <algorithm> using namespace std; //向下调整函

SDUT 周赛 神奇的树(简单题 注意数据类型的溢出 )

神奇的树 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 SDUT有一颗神奇的苹果树.假如某天早上这树上有x个苹果,那么这树这一天会再结出x个苹果来,也就是说到了晚上会有2*x个苹果,到了深 夜,会有专人人来摘苹果,而摘苹果的人总会使苹果数剩下当前数量对m的余数,也就是说假如当前数量为a,那么第二天早上会剩下a%m个苹果.也许聪明的你 已经发现了,有可能从某一天开始,这棵树上就再也没有苹果了.那么给你第一天早上的苹果数,请你判

第七章 神奇的树

第1节 开启"树"之旅第2节 二叉树第3节 堆--神奇的优先队列p194 建堆及堆排序 1 #include <stdio.h> 2 int h[ 101];//用来存放堆的数组 3 int n;//用来存储堆中元素的个数,也就是堆的大小 4 5 6 //交换函数,用来交换堆中的两个元素的值 7 void swap(int x,int y) 8 { 9 int t; 10 t=h[ x]; 11 h[ x]=h[ y]; 12 h[ y]=t; 13 } 14 15 16

神奇的树(主席树思想的应用)

主席树这个概念应该不陌生吧!恩?不会, 戳这里. 主席树(函数式线段树)用的是函数思想,一个节点开数组用来保存自己的左右节点,这样节省许多不必要的空间,还可以保存许多历史状态.而这里我们用的是主席树的函数思想来实现. 上题:http://acm.hdu.edu.cn/showproblem.php?pid=5444 题目大意: 给你一个序列,第一个数为二叉树根节点,之后每个数往上加节点,且保证左节点小于根节点,且保证右节点大于根节点.且每个节点最多有2个子节点.然后再查询位置,每往左找输出一个E

前端也要学点数据结构神奇的树状数组的三大应用

http://www.zfs.cn/home.php?mod=space&uid=674359 http://www.zfs.cn/home.php?mod=space&uid=674360 http://www.zfs.cn/home.php?mod=space&uid=674361 http://www.zfs.cn/home.php?mod=space&uid=674363 http://www.zfs.cn/home.php?mod=space&uid=67

数据结构-B树

  1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree).前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率. 但是咱们有面对这样一个实际问题:就是大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的

从B树、B+树、B*树谈到R 树

第一节.B树.B+树.B*树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree(B~Tree).前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率. 但是咱们有面对这样一个实际问题:就是大规模数据存储中,实现索引查询这样一个实际背景下,树节

总结之---树状数组+逆序对问题。

咳咳,这个图必须要的.... 首先,当有一个数组a数量非常大的时候,我们可能改变某个a[i]的值,要求a[n]的和,全部加起来,无疑是要O(n)的时间复杂度. 但是如果n非常大时,O(n)时间复杂度肯定要跪,所以,怎么办的,用神奇的树状数组. 树状数组代码简单,但是非常强大!更令人兴奋的是,它的时间复杂度值需要O(logn)!!! 好了,首先要的东西是把上图的c[n]表示出来,该怎么弄呢,代码如下: int lowbit(int t) { return t&(-t); } 这个代码,简单到爆,但

从B 树、B+ 树、B* 树谈到R 树

从B 树.B+ 树.B* 树谈到R 树 作者:July.weedge.Frankie.编程艺术室出品. 说明:本文从B树开始谈起,然后论述B+树.B*树,最后谈到R 树.其中B树.B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成. 出处:http://blog.csdn.net/v_JULY_v . 第一节.B树.B+树.B*树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced