Codeforces 900D Unusual Sequences:记忆化搜索
题目链接:http://codeforces.com/problemset/problem/900/D
题意:
给定x,y,问你有多少个数列a满足gcd(a[i]) = x 且 ∑(a[i]) = y。
题解:
由于gcd(a[i]) = x,所以y一定是x的倍数,否则无解。
那么原题就等价于:问你有多少个数列a满足gcd(a[i]) = 1 且 ∑(a[i]) = y/x。
设f(k)为gcd(a[i]) = 1 且 ∑(a[i]) = k时的答案。
只满足条件∑(a[i]) = k的数列共有2^(k-1)种(隔板法)
然后要从中去掉gcd不为1的数列。
每个和为k且gcd不为1的数列a1,对应着一个和为k的因数且gcd为1的数列a2。
因为a1可以由a2整体放大而来。
那么也就是f(k) = 2^(k-1) - ∑ f(p),其中p为k的因数(p != k)。
搜索 + map记忆化即可。
由于需要用到的f(k),k均为y/x的因数,最多sqrt(y/x)个。
加上map的log复杂度,所以总复杂度为O(sqrt(n)*log(n))。
AC Code:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <map>
#define MOD 1000000007 using namespace std; int x,y;
map<int,int> mp; long long quick_pow(long long n,long long k)
{
long long ans=;
while(k>)
{
if(k&) ans=(ans*n)%MOD;
n=n*n%MOD;
k>>=;
}
return ans;
} long long dfs(int i)
{
if(i==) return ;
if(mp.count(i)) return mp[i];
long long ans=quick_pow(,i-);
for(int j=;j*j<=i;j++)
{
if(i%j==)
{
ans=((ans-dfs(j))%MOD+MOD)%MOD;
if(i/j!=j) ans=((ans-dfs(i/j))%MOD+MOD)%MOD;
}
}
ans=((ans-)%MOD+MOD)%MOD;
return mp[i]=ans;
} int main()
{
cin>>x>>y;
cout<<(y%x== ? dfs(y/x) : )<<endl;
}
Codeforces 900D Unusual Sequences:记忆化搜索的更多相关文章
- Codeforces 900D Unusual Sequences 容斥原理
题目链接:900D Unusual Sequences 题意: 给出两个数N,M.让你求数列(和为M,gcd为N)的个数. 题解: 首先,比较容易发现的是M%N如果不为零,那么一定不能构成这样的序列 ...
- CodeForces 173C Spiral Maximum 记忆化搜索 滚动数组优化
Spiral Maximum 题目连接: http://codeforces.com/problemset/problem/173/C Description Let's consider a k × ...
- CodeForces 398B 概率DP 记忆化搜索
题目:http://codeforces.com/contest/398/problem/B 有点似曾相识的感觉,记忆中上次那个跟这个相似的 我是用了 暴力搜索过掉的,今天这个肯定不行了,dp方程想了 ...
- CodeForces 132C Logo Turtle (记忆化搜索)
Description A lot of people associate Logo programming language with turtle graphics. In this case t ...
- CodeForces 918D MADMAX(博弈+记忆化搜索)
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- Codeforces 667C Reberland Linguistics 记忆化搜索
链接 Codeforces 667C Reberland Linguistics 题意 给你一个字符串,除去前5个字符串后,使剩下的串有长度为2或3的词根组成,相邻的词根不能重复.找到所有的词根 思路 ...
- CodeForces 900D Unusual Sequences
题目链接: https://codeforces.com/contest/900/problem/D 题意 假设有distinct 正整数序列{a1,a2,,,an},满足gcd(a1, a2, .. ...
- Codeforces #564div2 E1(记忆化搜索)
虽然不是正解但毕竟自己做出来了还是记下来吧- 对每个人分别dfs得到其期望,某两维的组合情况有限所以Hash一下避免了MLE. #include <cstdio> #include < ...
- Codeforces Gym 100231G Voracious Steve 记忆化搜索
Voracious Steve 题目连接: http://codeforces.com/gym/100231/attachments Description 有两个人在玩一个游戏 有一个盆子里面有n个 ...
随机推荐
- mock测试类的时候,添加@InjectMocks
1.在单元测试某个类的时候,引入该类的时,添加注解@InjectMocks 2.该类的变量,需要添加注解:@Mock 3.类中需要第三方协作者时,通常会用到get和set方法注入.通过spring框架 ...
- Redis源码阅读-sds字符串源码阅读
redis使用sds代替char *字符串, 其定义如下: typedef char *sds; struct sdshdr { unsigned int len; unsigned int free ...
- linux 参数内核
优化Linux内核参数 转自:http://www.centoscn.com/CentOS/config/2013/0804/992.html vim /etc/sysctl.conf 1.net ...
- shiro自定义logout filter
虽然shiro有自己默认的logout过滤器,但是,有些时候,我们需要自己定义一下操作,比如说loutgout后,进入指定页面,或者logout后写入日志操作,这个时候,我们可以通过自定义logout ...
- TCP可靠传输详解
TCP提供了可靠的传输服务,这是通过下列方式提供的: 分块发送:应用数据被分割成TCP认为最适合发送的数据块.由TCP传递给IP的信息单位称为报文段或段(segment) 定时确认重传:当TCP发出一 ...
- EasyDSS流媒体服务器软件对数据库Sqlite3和MySQL的同时支持说明
EasyDSS流媒体音视频直播与点播服务器软件,是一套提供一站式的转码.点播.直播.检索.回放.录像下载服务的高性能RTMP/HLS/HTTP-FLV流媒体服务,极大地简化了流媒体相关业务的开发和集成 ...
- poj 3714 Raid【(暴力+剪枝) || (分治法+剪枝)】
题目: http://poj.org/problem?id=3714 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27048#prob ...
- 九度OJ 1341:艾薇儿的演唱会 (最短路)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:528 解决:241 题目描述: 艾薇儿今天来到了中国,她计划两天后在哈尔滨举行一场个人的演唱会.由于出现了紧急情况,演唱会的举办方要求艾薇儿 ...
- zookeepeer ID生成器 (一)
目录 写在前面 1.1. ZK 的分布式命名服务 1.1.1. 分布式 ID 生成器的类型 UUID方案 1.1.2. ZK生成分布式ID 写在最后 疯狂创客圈 亿级流量 高并发IM 实战 系列 疯狂 ...
- Android系统移植与调试之------->如何修改Android设备添加3G上网功能
1.首先先来看一下修改前后的效果对比图 step1.插上3G设备前 step2.插上3G设备后,获取信号中.... step3.插上3G设备后,获取到信号 step4.使用3G信号浏览网页 2.下面讲 ...