sicily 1002
这题没什么说的。。就是深搜,只不过我搞了一个小时,原因:刚昨晚马的周游问题,数字之间用空格分开。。谁知道这题是用逗号,一改,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相关推荐
- 中大SICILY分类
原文出处:http://linguifan2010.blog.163.com/blog/static/1315127442010102131322482/ ********************** ...
- Soj题目分类 python代码)
正值期末复习,刷点soj放松下 但想看看能不能在找点关于数据结构的题目来做一下. 在网上看到有不少人上传过那些关于部分SOJ题目的描述,但是说实话有些乱 不过我看到有个网页中包含的一个类似文档的东西, ...
- 初学者acm的练习题指南
上机练习题参考题 忘了在哪找的啦~~希望对大家有帮助呦 <!--[if !supportLists]-->1. <!--[endif]-->Programming Bas ...
- 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. 贪心 ...
- 力扣1002.查找常用字符
力扣 1002. 查找常用字符 本人力扣练习已上传至码云,可互相学习借鉴. 难度-简单 题目: 给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表 ...
- 大数加法【HDU 1002】
大数加法模板 一般的加法只要int类型的两数直接相加即可,大一点的数可以设为long long类型,而超过长整型的数则属于大数问题了,大数加法其实也比较简单,利用数组实现就可以啦: 主要思想如下: ( ...
- BestCoder 1st Anniversary ($) 1002.Hidden String
Hidden String Accepts: 437 Submissions: 2174 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 26 ...
最新文章
- jQuery中的.bind()、.live()和.delegate()之间区别分析
- go 调用etcd实现分布式锁
- Kotlin实战指南二:变量、常量、静态常量
- JavaScript实现kruskal克鲁斯卡尔算法(附完整源码)
- mel滤波器组频率响应曲线_了解二阶滤波器的奈奎斯特图
- 【转载保存】接口压力测试安装与使用
- 高级软件工程2017第2次作业—— 个人项目:四则运算题目生成程序(基于控制台)...
- iOS 关于真机和模拟器framework合并
- shell查询年月日(可以作为crontab判断年月日)
- udev介绍及两个小场景应用
- FPGA基础入门【16】开发板加速度传感器配置
- Spark入门实战WordCount
- 蓝桥杯2022年第十三届决赛真题-迷宫
- Movist Pro for Mac 2.2.16 — 播放器
- zabbix三种常用报警方式:邮件、微信和短信报警
- python从云端服务器读数据_云服务器简单实现Python自动运维
- 嵌入式QTlinux 工程编译
- 淘宝商品详情接口抓取
- 米米商城项目实战(含项目源码)
- DeepDive教程第一部分
热门文章
- Java利器之UML类图详解
- java学无止境-STFWnbsp;ornbsp;RTFM
- Python图像识别-Opencv02 二值图像、灰度图像以及彩色图像
- Qt QImage scaled方法缩放中的问题
- win8常见系统漏洞
- 【PostgreSQL】PostgreSQL的upsert功能(insert on conflict do)的用法
- 遥感图像的空间分辨率,光谱分辨率等
- jemter使用beanshell的几种方法
- pc前端js调起电脑本地应用程序(需要客户端配合 自定义URL Protocol 协议 )
- 用JS 控制文字两行 ,展示省略号(兼容谷歌 IE等各大浏览器)