这玩意好像甚至有递推式……不太懂

(为什么是图片?cnblogs 第一个公式没渲染成功)

时间复杂度是 \(O(4^{\deg F}\log K)\) 的。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=100;
int f[17][maxn],cur[10],al[4];
int calc(int K){
// cerr<<"___________________________________"<<endl;
// cerr<<"solve "<<K<<endl;
memset(f,0,sizeof(f));
f[1][1]=1;
for(int R=2;R<=62;R++){
if(K&(1ll<<R-2)){
for(int j=0;j<4;j++)al[j]=0;
for(int j=0;j<16;j++)al[0]+=(j&1)*(1<<j);
for(int j=0;j<16;j++)al[1]+=(__builtin_popcount(j)&1)*(1<<j);
for(int j=0;j<16;j++)al[2]+=(((j&1)+((j>>1)&1)+((j>>2)&1))&1)*(1<<j);
for(int j=0;j<16;j++)al[3]+=((((j>>1)&1)+((j>>3)&1))&1)*(1<<j);
for(int j=1;j<16;j++){
int c1=(1<<16)-1,c2=0;
for(int k=0;k<4;k++){
if(j&(1<<k))c1=c1&al[k];
else c2=c2|al[k];
}
int x=c1-(c1&c2);
for(int l=0;l<16;l++)if((1<<l)&x)f[j][R]+=f[l][R-1];
}
for(int j=0;j<4;j++)al[j]=0;
for(int j=0;j<16;j++)al[0]+=(((j&1)+((j>>2)&1))&1)*(1<<j);
for(int j=0;j<16;j++)al[1]+=((((j>>1)&1)+((j>>2)&1)+((j>>3)&1))&1)*(1<<j);
for(int j=0;j<16;j++)al[2]+=(__builtin_popcount(j)&1)*(1<<j);
for(int j=0;j<16;j++)al[3]+=((j>>3)&1)*(1<<j);
for(int j=1;j<16;j++){
int c1=(1<<16)-1,c2=0;
for(int k=0;k<4;k++){
if(j&(1<<k))c1=c1&al[k];
else c2=c2|al[k];
}
int x=c1-(c1&c2);
for(int l=0;l<16;l++)if((1<<l)&x)f[j][R]+=f[l][R-1];
}
}else{
for(int j=0;j<4;j++)al[j]=0;
for(int j=0;j<16;j++)al[0]+=(j&1)*(1<<j);
for(int j=0;j<16;j++)al[2]+=((j>>1)&1)*(1<<j);
for(int j=1;j<16;j++){
int c1=(1<<16)-1,c2=0;
for(int k=0;k<4;k++){
if(j&(1<<k))c1=c1&al[k];
else c2=c2|al[k];
}
int x=c1-(c1&c2);
for(int l=0;l<16;l++)if((1<<l)&x)f[j][R]+=f[l][R-1];
}
for(int j=0;j<4;j++)al[j]=0;
for(int j=0;j<16;j++)al[0]+=((j>>2)&1)*(1<<j);
for(int j=0;j<16;j++)al[2]+=((j>>3)&1)*(1<<j);
for(int j=1;j<16;j++){
int c1=(1<<16)-1,c2=0;
for(int k=0;k<4;k++){
if(j&(1<<k))c1=c1&al[k];
else c2=c2|al[k];
}
int x=c1-(c1&c2);
for(int l=0;l<16;l++)if((1<<l)&x)f[j][R]+=f[l][R-1];
}
}
// for(int j=0;j<16;j++)cerr<<f[j][R]<<" ";cerr<<endl;
}
int ans=0;
for(int i=0;i<16;i++)ans+=f[i][62]*__builtin_popcount(i);
// cerr<<K<<" ans = "<<ans<<endl;
return ans;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
// cout<<calc(100)<<endl;
int K,res=0;cin>>K;
for(int i=1,z=1;i<=K;i++)z=z*10,res+=calc(z);
cout<<res<<endl;
return 0;
}

Project Euler 588 题解的更多相关文章

  1. project euler 169

    project euler 169 题目链接:https://projecteuler.net/problem=169 参考题解:http://tieba.baidu.com/p/2738022069 ...

  2. Python练习题 040:Project Euler 012:有超过500个因子的三角形数

    本题来自 Project Euler 第12题:https://projecteuler.net/problem=12 # Project Euler: Problem 12: Highly divi ...

  3. [project euler] program 4

    上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来. 今天试着暴力破解了一下,代码如下: (我大概是第 172,719 个解出 ...

  4. Python练习题 029:Project Euler 001:3和5的倍数

    开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...

  5. Project Euler 9

    题意:三个正整数a + b + c = 1000,a*a + b*b = c*c.求a*b*c. 解法:可以暴力枚举,但是也有数学方法. 首先,a,b,c中肯定有至少一个为偶数,否则和不可能为以上两个 ...

  6. Project Euler 44: Find the smallest pair of pentagonal numbers whose sum and difference is pentagonal.

    In Problem 42 we dealt with triangular problems, in Problem 44 of Project Euler we deal with pentago ...

  7. 【Project Euler 8】Largest product in a series

    题目要求是: The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × ...

  8. Project Euler 第一题效率分析

    Project Euler: 欧拉计划是一系列挑战数学或者计算机编程问题,解决这些问题需要的不仅仅是数学功底. 启动这一项目的目的在于,为乐于探索的人提供一个钻研其他领域并且学习新知识的平台,将这一平 ...

  9. Python练习题 049:Project Euler 022:姓名分值

    本题来自 Project Euler 第22题:https://projecteuler.net/problem=22 ''' Project Euler: Problem 22: Names sco ...

  10. Python练习题 048:Project Euler 021:10000以内所有亲和数之和

    本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...

随机推荐

  1. Contrastive Learning 对比学习 | RL 学 representation 时的对比学习

    记录一下读的三篇相关文章. 01. Representation Learning with Contrastive Predictive Coding arxiv:https://arxiv.org ...

  2. springboot 参数注解 注入参数

    什么时注解参数 说明 我们在 使用spring mvc 的时候会使用这样的注解 @ResponseBody 这样,spring mvc 会将 客户端传来的数据,自动构建成 相应类型的对象. 有些情况下 ...

  3. 【双堆懒删除】codeforces 1294 D. MEX maximizing

    前言 双堆懒删除 当需要维护若干元素中的最大值(或最小值)时,可以用一个堆维护,但是堆只擅长处理堆顶元素,对堆中任意元素的处理就束手无策了.此时,可以引入另外一个堆,我们定义原来的堆为保存堆 \(ex ...

  4. mysql 创建字段createtime 自动添加时间

    1. 创建createtime字段 类型选为timestamp 2.  添加默认值 CURRENT_TIMESTAMP

  5. MySQL 时区与 serverTimezone

    TL;DR 手动为 MySQL 指定非偏移量的时区,以避免 TIMESTAMP 类型夏令时问题和时区转化性能瓶颈 TIMESTAMP 范围:'1970-01-01 00:00:01' UTC to ' ...

  6. spring boot 启动原理解析

    https://www.cnblogs.com/xiaoxi/p/7999885.html 我们开发任何一个Spring Boot项目,都会用到如下的启动类 1 @SpringBootApplicat ...

  7. Mockito入门:如何在Spring中Mock部分对象

    前情提要 随着分布式应用的开发逐渐成为标配,多个微服务团队合作来完成垂直业务的开发成为了一种常态.微服务使得团队可以专注于自己的业务逻辑,在和下游依赖和上游对接的团队聚焦好接口之后,就进入正式的开发. ...

  8. 龙哥量化:通达信DRAWICON的图标副图显示效果(鸡肋,可以不看)

    新建一个副图指标,复制粘贴源码,先看一下效果图 DRAWTEXT_FIX(1,0.01,0.01,0,'通达信中DRAWICON的图标,方便大家折腾指标'),COLORMAGENTA; A:=CURR ...

  9. Qt编写地图综合应用20-多浏览器内核

    一.前言 本人写Qt程序这么多年,比较喜欢支持多个Qt版本,尤其是钟情于支持任意Qt版本+任意系统+任意编译器,这句话说起来简单其实实现起来就不容易了,首先你得有个很多版本的测试环境,起码十几个Qt环 ...

  10. CentOS 安装NFS

    背景 Kubernetes 对 Pod 进行调度时,以当时集群中各节点的可用资源作为主要依据,自动选择某一个可用的节点,并将 Pod 分配到该节点上.在这种情况下,Pod 中容器数据的持久化如果存储在 ...