这题没什么说的。。就是深搜,只不过我搞了一个小时,原因:刚昨晚马的周游问题,数字之间用空格分开。。谁知道这题是用逗号,一改,AC了

#include <iostream> #include <cstring> #include <vector> using namespace std; int n, m, d; bool isPrime[9956]; vector<int> ans; bool isVis[1001]; bool isPass() { int maxIndex = ans.size() - 1; int sum = ans.back(); for(int i = 1; i < d && i < ans.size(); i++) { sum += ans[maxIndex - i]; if(isPrime[sum]) return false; } return true; } bool dfs() { if(ans.size() == m - n + 1){ if(isPass()) return true; else return false; } for(int i = n; i <= m; i++) { if(!isVis[i]) { ans.push_back(i); isVis[i] = true; if(ans.size() > 1) { if(isPass() && dfs()) return true; isVis[i] = false; ans.erase(ans.begin() + ans.size() - 1); }else if(dfs()) return true; else { isVis[i] = false; ans.erase(ans.begin() + ans.size() - 1); } } } return false; } void setPrime() { memset(isPrime, true, sizeof(isPrime)); isPrime[0] = isPrime[1] = false; for(int i = 2; i * i <= 9956; i++) { if(isPrime[i]) { for(int k = 2; k * i < 9956; k++) isPrime[k * i] = false; } } } int main() { setPrime(); while(cin >> n >> m >> d && n != 0 && m != 0 && d != 0) { ans.clear(); memset(isVis, false, sizeof(isVis)); if(dfs()) { bool isFirst = true; for(vector<int>::iterator iter = ans.begin(); iter != ans.end(); iter++) { if(isFirst) { cout << *iter; isFirst = false; }else cout << "," << *iter; } cout << endl; }else cout << "No anti-prime sequence exists./n"; } }

无意中在网上看到陈泽裕http://blog.csdn.net/ChinaCzy/archive/2010/06/16/5673174.aspx的卡时战略,我也用用,哇,太神奇了,之前没卡时的时候用了1.05s,卡时后才用了0.01s,这什么差距啊。。。代码如下:

#include <iostream> #include <cstring> #include <vector> using namespace std; int n, m, d; bool isPrime[9956]; vector<int> ans; bool isVis[1001]; int count; bool mark; bool isPass() { int maxIndex = ans.size() - 1; int sum = ans.back(); for(int i = 1; i < d && i < ans.size(); i++) { sum += ans[maxIndex - i]; if(isPrime[sum]) return false; } return true; } bool dfs() { if(count++ > 4000) { mark = true; return false; } if(ans.size() == m - n + 1){ if(isPass()) return true; else return false; } for(int i = n; i <= m; i++) { if(mark) return false; if(!isVis[i]) { ans.push_back(i); isVis[i] = true; if(ans.size() > 1) { if(isPass() && dfs()) return true; isVis[i] = false; ans.erase(ans.begin() + ans.size() - 1); }else if(dfs()) return true; else { isVis[i] = false; ans.erase(ans.begin() + ans.size() - 1); } } } return false; } void setPrime() { memset(isPrime, true, sizeof(isPrime)); isPrime[0] = isPrime[1] = false; for(int i = 2; i * i <= 9956; i++) { if(isPrime[i]) { for(int k = 2; k * i < 9956; k++) isPrime[k * i] = false; } } } int main() { setPrime(); while(cin >> n >> m >> d && n != 0 && m != 0 && d != 0) { ans.clear(); memset(isVis, false, sizeof(isVis)); count = 0; mark = false; if(dfs()) { bool isFirst = true; for(vector<int>::iterator iter = ans.begin(); iter != ans.end(); iter++) { if(isFirst) { cout << *iter; isFirst = false; }else cout << "," << *iter; } cout << endl; }else cout << "No anti-prime sequence exists./n"; } }

sicily 1002相关推荐

  1. 中大SICILY分类

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

  2. Soj题目分类 python代码)

    正值期末复习,刷点soj放松下 但想看看能不能在找点关于数据结构的题目来做一下. 在网上看到有不少人上传过那些关于部分SOJ题目的描述,但是说实话有些乱 不过我看到有个网页中包含的一个类似文档的东西, ...

  3. 初学者acm的练习题指南

    上机练习题参考题 忘了在哪找的啦~~希望对大家有帮助呦 <!--[if !supportLists]-->1.    <!--[endif]-->Programming Bas ...

  4. sicily题目分类

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

  5. [sicily]部分题目分类

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

  6. Sicily 题目分类

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

  7. 力扣1002.查找常用字符

    力扣 1002. 查找常用字符 本人力扣练习已上传至码云,可互相学习借鉴. 难度-简单 题目: 给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表 ...

  8. 大数加法【HDU 1002】

    大数加法模板 一般的加法只要int类型的两数直接相加即可,大一点的数可以设为long long类型,而超过长整型的数则属于大数问题了,大数加法其实也比较简单,利用数组实现就可以啦: 主要思想如下: ( ...

  9. BestCoder 1st Anniversary ($) 1002.Hidden String

    Hidden String Accepts: 437 Submissions: 2174 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 26 ...

最新文章

  1. jQuery中的.bind()、.live()和.delegate()之间区别分析
  2. go 调用etcd实现分布式锁
  3. Kotlin实战指南二:变量、常量、静态常量
  4. JavaScript实现kruskal克鲁斯卡尔算法(附完整源码)
  5. mel滤波器组频率响应曲线_了解二阶滤波器的奈奎斯特图
  6. 【转载保存】接口压力测试安装与使用
  7. 高级软件工程2017第2次作业—— 个人项目:四则运算题目生成程序(基于控制台)...
  8. iOS 关于真机和模拟器framework合并
  9. shell查询年月日(可以作为crontab判断年月日)
  10. udev介绍及两个小场景应用
  11. FPGA基础入门【16】开发板加速度传感器配置
  12. Spark入门实战WordCount
  13. 蓝桥杯2022年第十三届决赛真题-迷宫
  14. Movist Pro for Mac 2.2.16 — 播放器
  15. zabbix三种常用报警方式:邮件、微信和短信报警
  16. python从云端服务器读数据_云服务器简单实现Python自动运维
  17. 嵌入式QTlinux 工程编译
  18. 淘宝商品详情接口抓取
  19. 米米商城项目实战(含项目源码)
  20. DeepDive教程第一部分

热门文章

  1. Java利器之UML类图详解
  2. java学无止境-STFWnbsp;ornbsp;RTFM
  3. Python图像识别-Opencv02 二值图像、灰度图像以及彩色图像
  4. Qt QImage scaled方法缩放中的问题
  5. win8常见系统漏洞
  6. 【PostgreSQL】PostgreSQL的upsert功能(insert on conflict do)的用法
  7. 遥感图像的空间分辨率,光谱分辨率等
  8. jemter使用beanshell的几种方法
  9. pc前端js调起电脑本地应用程序(需要客户端配合 自定义URL Protocol 协议 )
  10. 用JS 控制文字两行 ,展示省略号(兼容谷歌 IE等各大浏览器)