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

(为什么是图片?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. NoSQL一致性

    上面我们讲到了通过将数据冗余存储到不同的节点来保证数据安全和减轻负载,下面我们来看看这样做引发的一个问题:保证数据在多个节点间的一致性是非常困难的.在实际应用中我们会遇到很多困难,同步节点可能会故障, ...

  2. Java GC 调试手记

    摘要 本文记录GC调试的一次实验过程和结果. GC知识要点回顾 问题1:为什么要调试GC参数?在32核处理器的系统上,10%的GC时间导致75%的吞吐量损失.所以在大型系统上,调试GC是以小博大的不错 ...

  3. 轻松使用线程: 不共享有时是最好的——利用 ThreadLocal 提高可伸缩性

    Brian Goetz (brian@quiotix.com), 软件顾问 简介: ThreadLocal 类是悄悄地出现在 Java 平台版本 1.2 中的.虽然支持线程局部变量早就是许多线程工具( ...

  4. The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online (The 2nd Universal Cup

    The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online (The 2nd Universal Cup. Stage 1: Qingdao) J ...

  5. javascript 实现参数重载

    1.概要 在java中,同一个函数签名,比如 getUser,我们可以根据参数的不同,调用不同功能的方法.这也就是参数重载,如何在javascript也实现参数重载呢? 2.实现方法 function ...

  6. docker环境一个奇怪的问题,容器进程正常运行,但是docker ps -a却找不到容器,也找不到镜像

    一: 问题: docker环境一个奇怪的问题,使用容器跑的进程正常提供服务,在服务器上也能看到对应的端口正在监听,但是docker ps -a却找不到容器,也找不到镜像. 查看我使用docker容器启 ...

  7. 2023 秋季学期 六周集训 Misc方向

    by 高鹏鸿.密语 写在前面,记录和交流是一个很好的习惯,建议可以自己先搭建一个博客用于存储自己的做题记录以及方便交流.还有,对于Misc方向,灵活应对十分重要,一定要善用搜索引擎. 还有一点,给大家 ...

  8. ASCII 与 Unicode 中的引号

    原文地址:https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html 摘要 请不要使用 ASCII 中的重音符号 ` (0x60) 作为左边与 ASCII 中的撇号 ...

  9. 在 ASP.NET Core 中进行打包 (Bundling) 和紧缩 (Minification)

    在 ASP.NET Core 中进行打包 (Bundling) 和紧缩 (Minification) Bundler & Minifier for Visual Studio 2019 Bun ...

  10. SpringSecurity认证流程分析

    重要组件 SecurityContext 上下文对象,Authentication(认证)对象会放在里面 SecurityContextHolder 用于拿到上下文对象的静态工具类 Authentic ...