AT2272 [ARC066B] Xor Sum 题解
题目连接:传送门
分析
这道题只看题目中给的样例是找不出规律的
所以我们可以打一下表
1, 2, 4, 5, 8, 10, 13, 14, 18
如果你还是没有看出什么规律的话,我们可以从OEIS上搜索一下
网址:传送门
把这一个数列输入到搜索框,然后就会出现下面的页面
第一个就是我们想要的数列
大家可以看一下上面的证明和递推式(都是英文)
所以我们可以得到\(f[x]=f[x/2]+f[(x-1)/2]+f[(x-2)/2]\)
证明摘自洛谷:

代码
#include<cstdio>
#include<map>
#define ll long long
using namespace std;
const int Mod=1e9+7;
map<ll,ll> dp;
ll dfs(ll x){
    if(dp[x])return dp[x];
    return dp[x]=(dfs(x>>1)+dfs(x-1>>1)+dfs(x-2>>1))%Mod;
}
int main(){
    ll n;
    scanf("%lld",&n);
    dp[0]=1;
    dp[1]=2;
    ll res=dfs(n)%Mod;
    printf("%lld\n",res);
}
//打表
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
map<ll,ll> ma;
ll a[50]={1,2,4,5,8,10,13,14,18,21,26,28,33,36,40,41,46,50,57,60,68};
ll solve(ll xx){
    if(xx<=20) return a[xx];
    if(ma[xx]) return ma[xx];
    if(xx%2) return ma[xx]=(2*solve(xx/2)%mod+solve(xx/2-1)%mod)%mod;
    else return ma[xx]=(2*solve(xx/2-1)%mod+solve(xx/2)%mod)%mod;
}
int main(){
    ll n;
    scanf("%lld",&n);
    ll ans=solve(n);
    printf("%lld\n",ans);
    return 0;
}
AT2272 [ARC066B] Xor Sum 题解的更多相关文章
- AT2272 [ARC066B] Xor Sum
		我们可以知道异或可以看成不进位的加法,那么我们就可以得到 \(a + b = a\) ^ \(b + ((a \& b) << 1)\),不难发现 \(\frac{v - u}{2 ... 
- HDU4825:Xor Sum——题解
		http://acm.hdu.edu.cn/showproblem.php?pid=4825 Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含 ... 
- 2014 百度之星 1003 题解 Xor Sum
		Xor Sum Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包括了N个正整数,随后 Prometheu ... 
- 2014百度之星第三题Xor Sum(字典树+异或运算)
		Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ... 
- UVALive4682 XOR Sum
		UVALive4682 XOR Sum 题意 给定一个数组, 求连续子序列中异或值最大的值. 题解 假设答案区间为 [L, R], 则答案为 XOR[L, R], 可以将区间分解为 XOR[L,R] ... 
- HDU4825 Xor Sum —— Trie树
		题目链接:https://vjudge.net/problem/HDU-4825 Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Li ... 
- 2014百度之星资格赛—— Xor Sum(01字典树)
		Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ... 
- HDU 4825 Xor Sum(经典01字典树+贪心)
		Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ... 
- 字典树-百度之星-Xor Sum
		Xor Sum Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包括了N个正整数,随后 Prometheu ... 
随机推荐
- CMD指令和GIT指令
			CMD指令 dir 显示当前文件夹的所有的文件目录 mkdir 创建文件夹 cd> 创建文件 rd 删除文件夹 del 删除文件 cls 清屏 Linux指令 查看版本 node -v node ... 
- 5分钟速成Markdown
			一.认识 Markdown Markdown 是一种用来写作的轻量级「标记语言」,它用简洁的语法代替排版,而不像一般我们用的字处理软件 Word 或 Pages 有大量的排版.字体设置.它使我们专心于 ... 
- js原型链、继承、this指向等老生常谈却依然不熟的知识点——记录解析
			开始记录学习过程—— 很详细的解析过程——https://juejin.im/post/5c72a1766fb9a049ea3993e6 借鉴阅读——https://github.com/KieSun ... 
- 利用struts2进行单个文件,批量文件上传,ajax异步上传以及下载
			利用struts2进行单个文件,批量文件上传,ajax异步上传以及下载 1.页面显示代码 <%@ page language="java" import="java ... 
- 完美解决PYQT5登录界面跳转主界面方法
			该问题,有很多种方法,但是很多方法要么这个有问题,要么那个有问题,最后终于找到一种没问题的方法.记录一下: Login.py(登录窗口)文件 import sys from PyQt5 import ... 
- TensorFlow从0到1之TensorFlow逻辑回归处理MNIST数据集(17)
			本节基于回归学习对 MNIST 数据集进行处理,但将添加一些 TensorBoard 总结以便更好地理解 MNIST 数据集. MNIST由https://www.tensorflow.org/get ... 
- Oracle连接Db2
			因为有个业务场景需要访问客户DB2数据库的数据,我们使用的Oracle,百度一下是有方法的,本来以为很简单,没想到搞了一天,因为数据库版本都太老,使用的也少走了不少弯路,在此记录下来给需要的人借鉴. ... 
- [apue] 一个快速确定新系统上各类限制值的工具
			对于在不同 Unix 系统之间移植程序,最重要的事情就是确定新系统的一些编译时.运行时固定或不固定的限制值了.例如文件路径最大长度 PATH_MAX.进程最大可打开文件句柄数 OPEN_MAX.用户可 ... 
- ca33a_demo_c++_新旧代码的兼容char数组与vector_string相互转换
			/*ca33a_demo_c++33_CppPrimer_新旧代码的兼容_txwtech旧代码:数组和c风格字符串新代码:vector和string相互转换:c风格字符串<- ->stri ... 
- c++. Run-Time Check Failure #2 - Stack around the variable 'cc' was corrupted.
			Run-Time Check Failure #2 - Stack around the variable 'cc' was corrupted. char cc[1024]; //此处如果索引值 ... 
