Solution 简单写一下思考过程,比较水的数论题 第一个答案几乎已经是可以背下来的,在此不再赘述 考虑我们已经知道了\((p,q)\),其中\((p \perp q) \wedge (q \perp 2)\),要求的是循环长度 首先看看样例的\(\frac{1}{5}\)怎么做呢 观察答案,可以得到$$\frac{1}{5}=\sum_{t>0}(\frac{3}{16^t})$$ 简单思考一下,发现答案和\(p\)没关系,和\(q\)的关系为 \[\frac{1}{q}=\sum_{t>…
Period of an Infinite Binary Expansion 题目大意:给你一个分数,求这个分数二进制表示下从第几位开始循环,并求出最小循环节长度. 注释:int范围内. 想法:这题说实话,是一道神题!我们思考一下,如何将一个小数换成二进制?连续的乘2,然后取首位.这样的比较简洁的转换方式注定了这题其实是可做的.我们可以抓住循环节的在这样的方法下是怎样形成的?显然,存在一个x,使得每多乘$2^x$都会使得所形成的答案相同.第二点,我们知道,一个分数的循环节开始之前是不参与循环的.…
由乘2取整得到分数的小数位,可以找到规律!!! 例如:1/10,2/10,4/10,8/10,16/10,32/10,64/10…… 取整后:1/10,2/10,4/10,8/10,6/10,2/10,4/10…… 这样我们就发现规律了!!! 也就是对于p/q而言,要满足2^x=2^y mod q (gcd(p,q)==1); 化简:2^x*(2^(x-y)-1) = 0 mod q; q里面2的倍数有多少个,就是最小的循环起始位置. 继而化简:2^(x-y) = 1 mod q' (q'除以2…
欧拉定理.根据分数转换成2进制的过程,分子每次都乘2.对于循环节x,当2^x = 1(mod b)时肯定是循环节.显然当分母不能整除2的时候,即分母和2互质的话,就可以利用欧拉定理,使得2^(Euler(b)) = 1(mod b).然后对于Euler(b),枚举其因子,找到最小循环节就可以了. #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include…
这道题目感觉好难,根本就是无从下手的感觉,尝试了以前的所有方法,都没有思路,毫无进展,参考了一下别人的思路,感觉学到了新的知识 接下来开始分析 观察1/10这组数据,按照二进制转化法可以得到: 1/10 2/104/108/1016/1032/10.…… 对于每一个分子进行模10处理 可以相应的得到:    1/102/104/108/106/102/10…… 出现了重复,这个重复就是要求的最小循环 对于p/q,首先p'=p/gcd(p,q),q'=q-gcd(p,q),然后求p'*2^i ≡…
剑指offer 面试题39:判断平衡二叉树 提交网址:  http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=13&tqId=11192 时间限制:1秒       空间限制:32768K      参与人数:2481 题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 分析: 平衡二叉树定义 递归解法 AC代码: #include<iostream> #include<vector&…
题面 首先发现:一个数最多会出现1次: 然后深入推出:一个数不会既用它又用它的相反数: 这样就可以依次考虑每一位了: 如果所有的数都不含有这一位,那么就直接把所有的数除以2 如果含有,那么就减去这一位的数,再除以2: 2 当含有的时候搜索就可以了: 注意需通过去重来优化dfs,否则会TLE掉: #include <bits/stdc++.h> #define N 100010 using namespace std; int a[N],b[21][N],ans[N],st[N],top=0;…
原题链接 题意简介 要求有多少种 n 的排列,能够通过二分法正确地找到放在 pos 处的数字 x. 答案对 1e9+7 取模.n<=1000. 采用的二分法如下图: 思路分析 首先,这个排列中有一个位置是固定的,就是 a[pos] = x . 我们知道,二分查找的过程是不断缩小区间的过程,想要找到一个已经确定放在 pos 位置上的 x ,需要判断的 mid 的位置,需要的大于 x 的数的个数 c1 和小于 x 的数的个数 c0 也是固定的. 也就是说,我们只需要模拟这个二分过程,求解出 c0 和…
中文题意: 给你两个长度为 \(n\) 的01串 \(s,f,\)有 \(q\) 次询问. 每次询问有区间 \([\ l,r\ ]\) ,如果 \([\ l,r\ ]\) 同时包含\(0\)和\(1\),则询问终止,否则你可以将区间\([\ l,r\ ]\) 内严格小于 \(len_{lr}\) 的数字. 问是否可以使得询问不终止,且经过 \(q\) 次询问后可以将\(s\)改为\(f\). 前置知识: 线段树 没了 思路: 发现没法正序推过去(反正我不会),考虑根据询问逆推. 那么对于 \(f…
这个东西先放在这吧.做过的以后会用#号标示出来 1.burnside定理,polya计数法    这个大家可以看brudildi的<组合数学>,那本书的这一章写的很详细也很容易理解.最好能完全看懂了,理解了再去做题,不要只记个公式.    *简单题:(直接用套公式就可以了)    pku2409 Let it Bead      #http://acm.pku.edu.cn/JudgeOnline/problem?id=2409    pku2154 Color   #http://acm.p…