题目链接: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相关推荐

  1. Sicily 1214. 信号分析

    1214. 信号分析 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description 半人马座(Centaurus)不仅有着美丽的传说, ...

  2. sicily题目分类

    sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...

  3. [sicily]部分题目分类

    sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...

  4. Sicily 题目分类

    依照自己水平挑着做→ →~~ 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 ...

  5. 编程题目分类(剪辑)

    1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代 ...

  6. 中大SICILY分类

    原文出处:http://linguifan2010.blog.163.com/blog/static/1315127442010102131322482/ ********************** ...

  7. 【贪心】【codevs】1214 线段覆盖

    http://codevs.cn/problem/1214/ 我去这个题...wa的我都没脾气了... 我写while(~scanf("%d", &n))竟然是不对的... ...

  8. [Jobdu] 题目1214:丑数

    题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: ...

  9. lightoj 1214

    lightoj 1214 Large Division  (大数除法) 链接:http://www.lightoj.com/volume_showproblem.php?problem=1214 题意 ...

最新文章

  1. Python 基础 - 4.3 random模块
  2. Vue入坑——vue-router单页面多路由配置
  3. 作为一个互联网人,这部电影你不得不看
  4. tomcat启动成功 未加载项目_智云CRM项目启动大会在深圳成功召开
  5. Linux内核开发_2_Initramf
  6. 局域网内抢带宽的工具 破解版 【PSP流量限制软件】
  7. c# json转对象
  8. Himall商城文件帮助类IOHelper(2)
  9. 个人商业画布分析-0408-v1.0王玉娟
  10. SlidingBall滚动效果集成问题解决经验
  11. python程序猿_python程序员指南 pdf下载
  12. outlook撤回已发送邮件
  13. better-scroll内pullingUp无效(控制台报错)
  14. uniapp实现app跳转app
  15. python :SyntaxError: Non-ASCII character '\xe5' in file 错误
  16. ubuntu上不了网的解决方法(简便)
  17. 虚拟主机如何连接MYSQL数据库?
  18. 8本书助你了解人民日报“创作大脑”
  19. 我国各省市县的名称列表
  20. McAfee防火墙导致Jmail发邮件失败的解决方法

热门文章

  1. 强制将int转化为float
  2. Echarts地图添加引导线效果(labelLine)
  3. 利用过滤器处理字符,解决中文乱码问题
  4. 微信支付与支付宝钱包的竞争分析
  5. 如何快速解压/打开zip/rar/7z文件包?在线解压工具推荐
  6. linux下最全抓包命令使用方式学习和拓展
  7. python教程学习
  8. 大数据面试3分钟自我介绍_大数据面试自我介绍技巧
  9. Spring自定义数据源配置不当引起的Mybatis拦截器Interceptors 失效/不生效
  10. import win32api出错