Project Euler 588 题解

news/2024/10/22 23:43:26

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

image

(为什么是图片?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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/72216.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

闪迪SanDisk固态硬盘维修数据恢复

一、数据恢复方法 1.使用数据恢复——利用系统自带功能 对于Windows系统,可以尝试使用文件历史记录功能或撤销功能来恢复数据。 文件历史记录功能需要在之前已经开启并设置了备份。 撤销功能则适用于刚刚误删的文件,可以使用【Ctrl+Z】撤销删除组合快捷键或右键单击删除文件所…

ERQ:32位转5位仅掉些许精度,来看看两段式后训练量化 | ICML 2024

后训练量化(PTQ)在视觉Transformer(ViTs)领域引起了广泛关注,因为它在模型压缩方面表现出了高效率。然而,现有的方法通常忽视了量化权重和激活之间复杂的相互依赖关系,导致了相当大的量化误差。论文提出了一种名为ERQ的两步PTQ方法,精心设计用于顺序降低激活和权重量化…

QT打包exe(含错误解决方法)

打包工具windeployqt.exe运行报错QT5core库链接有问题 把打包工具路径下的libstdc++-6.dll文件粘贴到目标路径下(可以看到两个文件的大小是有差别的,具体原因未知)参考 https://blog.csdn.net/hanhui22/article/details/109595193

南沙C++信奥赛陈老师解一本通题 1943:【08NOIP普及组】排座椅

​【题目描述】上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的DD对同学上课时会交头接耳。同学们在教室中坐成了MM行NN列,坐在第ii行第jj列的同学的位置…

PyQt5 使用 Pyinstaller+multiprocessing 打包多进程应用时,引发的一些问题

解决 Pyinstaller 打包 PyQt5+multiprocessing 多进程应用时,引发的一些问题,包括反复启动主进程,以及:AttributeError: NoneType object has no attribute write 本文提供一些解决方案,您可能需要根据自己的实际情况,逐个尝试,直到自己的multiprocessing多进程应用正常…

2024数据采集与融合实践作业一

码云链接:gitee码云 作业①: 1)、爬取学校排名实验: o 要求:用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,以关键词“书包”搜索页面的数据,爬取商品名称和价格。 o 输出信息:排名 学校名称 省市 学校类型 总分1 清华大学 北京 综合 852.5…

spring上 -基于注解配置bean,动态代理,AOP笔记

用的是jdk8,spring框架里jar包的下载可以自己搜到 注解用到的jar包。60,注解配置Bean快速入门 基本介绍 代码结构: UserDao.javapackage com.hspedu.spring.component;import org.springframework.stereotype.Repository;/* * 使用 @Repository 标识该类是一个Repository…

2024数据采集与融合技术实践第二次作业

这个作业属于哪个课程 <首页 - 2024数据采集与融合技术实践 - 福州大学 - 班级博客 - 博客园 (cnblogs.com)>这个作业要求在哪里 <作业2 - 作业 - 2024数据采集与融合技术实践 - 班级博客 - 博客园 (cnblogs.com)>学号 <102202126>一、作业内容 作业①要求:…