sicily 1214
题目链接:sicily 1214
解题思路:
首先我觉得这是一道很好而且比较难的题,难度在于找规律。
题目告诉我们,n是一个很大的数(刚好在unsigned的范围内),这样的话,直接模拟是必然超时的,所以,我们需要根据题目的三条公式来推导a[n]。
这个规律我找了很久也没能找到,最后直接拿来用的,怎么想得到的我也不懂。规律如下:如果n的二进制形式满足回文序列的形式,那么a[n]=n。
得到这个规律,那么我们的题目就可以转换成找[1,n]中找到所有的数i,i满足二进制形式是回文序列。前面已经排除掉暴力模拟这个解法了,那么我们现在就只能构造了。考虑到i的二进制顶多也就是32位,回文序列的话我们可以只看16位,所以我们可以暴力枚举前16位,然后再用翻转操作求得整个回文序列,这样时间复杂度是2^16,可以接受。
之后的事情就是深搜暴力枚举啦,不再废话!
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;unsigned n,tmp;
unsigned cnt,ans;
const unsigned delta=1;unsigned getLen(unsigned num)
{unsigned len=0;while(num)num>>=1,len++;return len;
}unsigned reverse(unsigned num)
{unsigned res=0;while(num) {res=(res<<1)|(num&1);num>>=1;}return res;
}void cal(unsigned num)
{if(num==0)return; unsigned len=getLen(num),res=0;if(((num<<len)|reverse(num))<=n)ans++;if(((num<<len-1)|reverse(num>>1))<=n)ans++;
}void dfs(unsigned sum,int cnt)
{if(cnt==0){cal(sum);return;}dfs(sum<<1,cnt-1);dfs((sum<<1)+delta,cnt-1);
}int main()
{while(~scanf("%u",&n)){ans=0;dfs(0,16);printf("%u\n",ans);}return 0;
}
总结:
1、用二进制的思想考虑算法
2、多使用位运算
sicily 1214相关推荐
- Sicily 1214. 信号分析
1214. 信号分析 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description 半人马座(Centaurus)不仅有着美丽的传说, ...
- sicily题目分类
sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...
- [sicily]部分题目分类
sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...
- Sicily 题目分类
依照自己水平挑着做→ →~~ 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 ...
- 编程题目分类(剪辑)
1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代 ...
- 中大SICILY分类
原文出处:http://linguifan2010.blog.163.com/blog/static/1315127442010102131322482/ ********************** ...
- 【贪心】【codevs】1214 线段覆盖
http://codevs.cn/problem/1214/ 我去这个题...wa的我都没脾气了... 我写while(~scanf("%d", &n))竟然是不对的... ...
- [Jobdu] 题目1214:丑数
题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: ...
- lightoj 1214
lightoj 1214 Large Division (大数除法) 链接:http://www.lightoj.com/volume_showproblem.php?problem=1214 题意 ...
最新文章
- Python 基础 - 4.3 random模块
- Vue入坑——vue-router单页面多路由配置
- 作为一个互联网人,这部电影你不得不看
- tomcat启动成功 未加载项目_智云CRM项目启动大会在深圳成功召开
- Linux内核开发_2_Initramf
- 局域网内抢带宽的工具 破解版 【PSP流量限制软件】
- c# json转对象
- Himall商城文件帮助类IOHelper(2)
- 个人商业画布分析-0408-v1.0王玉娟
- SlidingBall滚动效果集成问题解决经验
- python程序猿_python程序员指南 pdf下载
- outlook撤回已发送邮件
- better-scroll内pullingUp无效(控制台报错)
- uniapp实现app跳转app
- python :SyntaxError: Non-ASCII character '\xe5' in file 错误
- ubuntu上不了网的解决方法(简便)
- 虚拟主机如何连接MYSQL数据库?
- 8本书助你了解人民日报“创作大脑”
- 我国各省市县的名称列表
- McAfee防火墙导致Jmail发邮件失败的解决方法