BZOJ3632: 外太空旅行
BZOJ1547: 周末晚会
https://lydsy.com/JudgeOnline/problem.php?id=1547
分析:
- 对于一个串旋转若干次会回到本身,旋转次数即是同构个数,这个东西和最小整除周期有关。
- 设\(f_i\)表示有多少个串的最小整除周期是\(i\),\(g_i=\sum\limits_{j|i}f_j,f_i=\sum\limits_{j|i}g_j\mu(i/j)\)。
- 那么答案就是\(\sum\limits_{i|n}\frac{f_i}{i}\)。
- 当\(n\le K\)时,\(g_i=2^i\), 否则,考虑求一个\(h_i\)表示长度为\(i\)重复出现次数小于等于\(K\)的个数(内部),求\(h\)前缀和优化一下\(O(n)\)求, 那么枚举最长前缀1+最长后缀1的个数\(j\),可得\(g_i=\sum\limits_{j=0}^{K}(j+1)\times h_{i-j-2}\),这个也可以前缀和优化一下\(O(1)\)求。
- 考虑到有用的\(f,g\)一共约数个数个,时间复杂度为\(O(n+\sigma(n)^2)\)。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
using namespace std;
#define mod 100000007
#define N 2050
#define M 2050
typedef long long ll;
int n,K;
ll f[N],g[N];
int pri[M],cnt,mu[M];
bool vis[M];
int w[N],tot,mi[M],h[M],sum[M],sum2[M];
void ins(int x) {
w[++tot]=x;
}
ll qp(ll x,ll y) {
ll re=1; for(;y;y>>=1,x=x*x%mod) if(y&1) re=re*x%mod; return re;
}
void sieve() {
int i,j;
mu[1]=1;
for(i=2;i<=n;i++) {
if(!vis[i]) {
pri[++cnt]=i; mu[i]=-1;
}
for(j=1;j<=cnt&&i*pri[j]<=n;j++) {
vis[i*pri[j]]=1;
if(i%pri[j]==0) {
mu[i*pri[j]]=0; break;
}
mu[i*pri[j]]=-mu[i];
}
}
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
scanf("%d%d",&n,&K);
cnt=0;
if(n<=K) {
memset(f,0,sizeof(f));
int i,j;
sieve();
for(mi[0]=i=1;i<=n;i++) mi[i]=mi[i-1]*2%mod;
for(i=1;i<=n;i++) for(j=i;j<=n;j+=i) {
f[j]=(f[j]+mi[i]*mu[j/i])%mod;
}
int ans=0;
for(i=1;i<=n;i++) if(n%i==0) ans=(ans+f[i]*qp(i,mod-2))%mod;
printf("%d\n",(ans%mod+mod)%mod);
continue;
}else {
memset(h,0,sizeof(h));
memset(f,0,sizeof(f));
memset(h,0,sizeof(h));
tot=0;
int i,j;
for(i=1;i*i<=n;i++) {
if(n%i==0) {
ins(i); if(n/i!=i) ins(n/i);
}
}
sieve();
for(mi[0]=i=1;i<=n;i++) mi[i]=mi[i-1]*2%mod;
h[0]=1; sum[0]=1;
for(i=1;i<=K;i++) h[i]=mi[i],sum[i]=(sum[i-1]+h[i])%mod;
for(i=K+1;i<=n;i++) {
if(i>K+1) h[i]=(sum[i-1]-sum[i-K-2]+mod)%mod;
else h[i]=sum[i-1];
sum[i]=(sum[i-1]+h[i])%mod;
}
for(i=0;i<=n;i++) sum2[i]=(sum2[i-1]+ll(n-i)*h[i])%mod;
for(i=1;i<=tot;i++) {
if(w[i]<=K+1) g[i]=mi[w[i]]-1;
else {
/*for(j=0;j<=K;j++) {
g[i]=(g[i]+ll(j+1)*h[w[i]-j-2])%mod;
}*/
ll ss2,ss1;
if(w[i]>K+2) ss2=sum2[w[i]-2]-sum2[w[i]-K-3],ss1=sum[w[i]-2]-sum[w[i]-K-3];
else ss2=sum2[w[i]-2],ss1=sum[w[i]-2];
g[i]=((ss2-ll(n-w[i]+1)*ss1)%mod+mod)%mod;
//g[i]=((sum2[w[i]-2]-sum2[w[i]-K-2]-ll(n-w[i]+1)*(sum[w[i]-2]-sum[w[i]-K-2]))%mod+mod)%mod;
}
}
for(i=1;i<=tot;i++) {
for(j=1;j<=tot;j++) if(w[j]%w[i]==0) {
f[j]=(f[j]+g[i]*mu[w[j]/w[i]])%mod;
}
}
int ans=0;
for(i=1;i<=tot;i++) ans=(ans+ll(f[i])*qp(w[i],mod-2))%mod;
printf("%d\n",(ans%mod+mod)%mod);
continue;
}
}
}
BZOJ3632: 外太空旅行的更多相关文章
- BZOJ3632:外太空旅行(最大团,DFS)
Description 在人类的触角伸向银河系的边缘之际,普通人上太空旅行已经变得稀松平常了.某理科试验班有n个人,现在班主任要从中选出尽量多的人去参加一次太空旅行活动. 可是n名同学并不是和平相处的 ...
- bzoj 3632: 外太空旅行 最大团
3632: 外太空旅行 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 389 Solved: 129[Submit][Status] Descript ...
- 洛谷 P4212 外太空旅行
题目描述 在人类的触角伸向银河系的边缘之际,普通人上太空旅行已经变得稀松平常了.某理科试验班有n个人,现在班主任要从中选出尽量多的人去参加一次太空旅行活动. 可是n名同学并不是和平相处的.有的人,比如 ...
- BZOJ 3632 外太空旅行(最大团)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3632 [题目大意] 求图中的最大团. [题解] 最大团问题是npc问题,因此可以考虑随 ...
- 想要见识外太空?一款VR头显就能帮你实现梦想
除了宇航员,我们中的大多数人一生都没有机会前往地球之外的宇宙空间,只能在图片和纪录片中感受浩瀚宇宙的震撼. 美国肯尼迪航天中心和BrandVR合作推出的VR头显 而NASA在VR中的投资,创造的新的V ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- luogu4212
P4212 外太空旅行 题目描述 在人类的触角伸向银河系的边缘之际,普通人上太空旅行已经变得稀松平常了.某理科试验班有n个人,现在班主任要从中选出尽量多的人去参加一次太空旅行活动. 可是n名同学并不是 ...
- NASA的下一个十年(译)
原文 MICHAEL ROSTON (New York Times) 从左起:木卫二:土卫六:经过火星的水手谷星的合成图:金星的拼接图 大多数人已经从人类第一次近距离看到冥王星的兴奋中冷静下来.下一个 ...
- ****CSS各种居中方法
水平居中的text-align:center 和 margin:0 auto 这两种方法都是用来水平居中的,前者是针对父元素进行设置而后者则是对子元素.他们起作用的首要条件是子元素必须没有被flo ...
随机推荐
- Spark机器学习7·降维模型(scala&python)
PCA(主成分分析法,Principal Components Analysis) SVD(奇异值分解法,Singular Value Decomposition) http://vis-www.cs ...
- 华为S5700系列交换机配置通过Telnet登录设备
声明:不管什么服务,都需要交换机开启服务,创建对应权限的用户,在通道下允许协议通过,缺一不可,以telnet为例. 组网图形 图1 配置通过Telnet登录设备组网图 组网需求 如图一所示,PC与设备 ...
- 搭建 Spring 开发环境
把以下 jar 包加入到工程的 classpath 下: Spring 的配置文件: 一个典型的 Spring 项目需要创建一个或多个 Bean 配置文件, 这些配置文件用于在 Spring IOC ...
- 初涉Rx套餐 之RxBinding(让你的事件流程更清晰)
转载请注明出处:王亟亟的大牛之路 最近下班回家都在WOW,周末就爆肝,感觉人都要GO DIE了,昨天下午看了看RxBinding相关的功能感觉还是蛮强大的,所提供的API也是相当丰富(基本Rx套餐都是 ...
- Node.Js安装教程
Node.Js安装教程 介绍下我的环境 环境 值 操作系统 win10 64bit Node.Js 8.9.4 emmmm 表格中毒了,为什么出不来效果 一.下载及安装 这个可以去Node.Js官网上 ...
- 深入理解虚拟机、容器和Hyper技术
本文首先介绍了操作系统,然后引出容器技术以及虚拟机技术,最后介绍了Docker和Hyper技术.通过本文可以清楚地对三者有感性认识. 操作系统概述 我们可以把操作系统简化为: 操作系统 = 内核 + ...
- 如何在深层嵌套ngRepeat中获取不同层级的$index
<ul class="list-group" ng-repeat="item in vm.appData" ng-init="outerInde ...
- javascript异步编程的几种方法
目前工作中用的比较多的异步模式编程有如下几种方法 一 回调函数 这是异步编程最基本的方法,假设有两个函数f1和f2,后者等待前者的执行结果 f1(); f2(); 如果f1是一个很耗时的任务,可以考虑 ...
- Educational Codeforces Round 38
http://codeforces.com/contest/938 A:sb题 //#pragma comment(linker, "/stack:200000000") //#p ...
- VMware虚拟机克隆Linux系统引起的网卡问题
1. 手动配置静态网卡地址不生效2. 网卡名变成了eth1[root@localhost network-scripts]# ls |grep ifcfg ifcfg-eth0 ifcfg-lo [r ...