Anti-prime sequence (P2034)

来源:互联网 发布:慢跑减肥 知乎 编辑:程序博客网 时间:2024/06/06 00:46

题意: 给定一串连续的整数从n到 n+m,

            让我们给其数排序,满足以下要求:在这m+1个数中的任意的连续的2~d个数

            之和不为素数(其中不考虑循环的情况)


思路:直接DFS判断即可,


感想:感觉好久没有做过题一样的,一开始还对题意把握得不准。好久才做出来,幸好一次过。


#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;bool p[10000];int ans[1001];int n,m,d;int num;bool b[1001];bool isok;void dfs(int j){//cout<<j<<endl;int i,k;if (j>num){isok=true;for (i=1;i<num;++i)printf("%d,",ans[i]);printf("%d\n",ans[num]);return;}if (j==1){for (i=n;i<=m;++i) if (!b[i]){b[i]=true;ans[j]=i;dfs(j+1);b[i]=false;if (isok)return;}return;}int sum=0;if (j<d){for (i=n;i<=m;++i) if (!b[i]){sum=i;for (k=j-1;k;--k){sum+=ans[k];if (!p[sum])break;}if (k)continue;b[i]=true;ans[j]=i;dfs(j+1);b[i]=false;if (isok)return;}return;}for (i=n;i<=m;++i) if (!b[i]){sum=i;for (k=j-1;k>j-d;--k){sum+=ans[k];if (!p[sum])break;}if (k>j-d)continue;b[i]=true;ans[j]=i;dfs(j+1);b[i]=false;if (isok)return;}}int main(  ){ int i,j,k;memset(p,false,sizeof(p));for (i=2;i<10000;i++) if (!p[i])for (j=i*i;j<10000;j+=i)p[j]=true;memset(b,false,sizeof(b));while (cin>>n>>m>>d,n||m||d){ num=m-n+1;isok=false;dfs(1);if (!isok)puts("No anti-prime sequence exists.");}    return 0;}

Anti-prime Sequences
Time Limit: 3000MS Memory Limit: 30000KTotal Submissions: 2714 Accepted: 1257

Description

Given a sequence of consecutive integers n,n+1,n+2,...,m, an anti-prime sequence is a rearrangement of these integers so that each adjacent pair of integers sums to a composite (non-prime) number. For example, if n = 1 and m = 10, one such anti-prime sequence is 1,3,5,4,2,6,9,7,8,10. This is also the lexicographically first such sequence. 

We can extend the definition by defining a degree danti-prime sequence as one where all consecutive subsequences of length 2,3,...,d sum to a composite number. The sequence above is a degree 2 anti-prime sequence, but not a degree 3, since the subsequence 5, 4, 2 sums to 11. The lexicographically .rst degree 3 anti-prime sequence for these numbers is 1,3,5,4,6,2,10,8,7,9. 

Input

Input will consist of multiple input sets. Each set will consist of three integers, n, m, and d on a single line. The values of n, m and d will satisfy 1 <= n < m <= 1000, and 2 <= d <= 10. The line 0 0 0 will indicate end of input and should not be processed.

Output

For each input set, output a single line consisting of a comma-separated list of integers forming a degree danti-prime sequence (do not insert any spaces and do not split the output over multiple lines). In the case where more than one anti-prime sequence exists, print the lexicographically first one (i.e., output the one with the lowest first value; in case of a tie, the lowest second value, etc.). In the case where no anti-prime sequence exists, output 

No anti-prime sequence exists. 

Sample Input

1 10 21 10 31 10 540 60 70 0 0

Sample Output

1,3,5,4,2,6,9,7,8,101,3,5,4,6,2,10,8,7,9No anti-prime sequence exists.40,41,43,42,44,46,45,47,48,50,55,53,52,60,56,49,51,59,58,57,54

Source

East Central North America 2004

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 学信网手机号忘了密保也忘了怎么办 学信网账号被注销了怎么办 原味奶酪太难吃怎么办 cma年费太贵了怎么办 会计证3年没年检怎么办 幼师面试没有什么特长怎么办 电子学历注册表过期了怎么办 学信网查不到电子注册登记表怎么办 学历证书电子注册备案表过期怎么办 举报人对处理结果不满意怎么办 亚马逊账号申诉后余额怎么办 怎么办北京市工会会员互助服务卡 国家发改委录用公示后怎么办 慕课的账号忘了怎么办 清华同方无线鼠标没反应怎么办 全日制专硕考上公务员了怎么办 超出了期刊编辑部审稿时间怎么办 教师晋职称毕业证丢了怎么办 下属部门一直不交材料怎么办 简书投稿被拒绝怎么办 论文引用文献为0怎么办 小米屏幕录制卸载了怎么办 用edius剪的视频卡顿怎么办 微店手机号换号登不进去了怎么办 微信加人被限制怎么办 微信与电脑同步怎么办 微信号盗了红包怎么办 微信被别人登录冻结了怎么办? 微信账号被冻结了怎么办 我微信冻结了怎么办 微信账号冻结了怎么办 微信被冻结里面的钱怎么办 微信账户冻结了怎么办 微信公众号忘记密码怎么办 网课没有刷完怎么办 形势与政策挂了怎么办 苹果录屏声音小怎么办 老师跟学生家长吵起来了怎么办 蓝幕拍摄抠像有蓝色怎么办 学东西悟性不高怎么办 微商不会写笔记怎么办