sicily 1002 Anti-prime Sequences
debug了好久。。各种犯错。。按照某个学长的思路,终于AC了。。
#include <iostream>
#include <cstring>
using namespace std; int n,m,d;
bool isPrime[]; // 存储素数表
bool added[]; // 存储是否已添加到结果数组中
int re[]; // 结果存储数组
bool hasFoundResult = false; // 存储是否已找到答案 void buildPrimeDiagram() // 构建素数表
{
memset(isPrime,true,sizeof(isPrime));
for (int i = ; i <= ; i++)
{
if (isPrime[i])
for (int j = i; j*i <= ; j++)
{
isPrime[j*i] = false;
}
}
} bool passMuster(int numberOfTheNumbersAdded) // 判断到当前为止符合要求,是返回true,否返回false
{
int sum = re[numberOfTheNumbersAdded];
for (int i = , j = numberOfTheNumbersAdded-; i < d&&j>=; i++,j--)
{
sum+=re[j];
if (isPrime[sum]) return false;
}
return true;
} void dfs(int numberOfTheNumbersAdded) // 一个个的添加符合要求的数到结果数组中
{
if (numberOfTheNumbersAdded == m-n+) // 添加完全时
{
hasFoundResult = true;
return;
}
for (int i = n; i <= m; i++)
{
if (!added[i]) // i还未被添加时
{
re[numberOfTheNumbersAdded] = i; // 将i添加到结果数组
if (passMuster(numberOfTheNumbersAdded)) // 如果添加i后符合要求
{
added[i] = true;
dfs(numberOfTheNumbersAdded+); // 添加下一个
if (hasFoundResult) return; // 如果找到答案直接返回
added[i] = false; // 没有找到时, 把i的状态设为未添加
}
}
}
} int main()
{
buildPrimeDiagram();
while (cin>>n>>m>>d)
{
if (n==&&m==&&d==) break;
hasFoundResult = false; // 设为未找到答案
int numberOfTheNumbersAdded = ;
memset(added, false, sizeof(added));
dfs(numberOfTheNumbersAdded); // 寻找答案
if (hasFoundResult)
{
for (int i = ; i <= m-n; i++)
{
if (i!=) cout<<',';
cout<<re[i];
}
cout<<endl;
}
else cout<<"No anti-prime sequence exists."<<endl;
}
return ;
}
sicily 1002 Anti-prime Sequences的更多相关文章
- Who Gets the Most Candies?(线段树 + 反素数 )
Who Gets the Most Candies? Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%I64d &am ...
- 1002: Prime Path
题目链接:http://172.16.200.33/JudgeOnline/problem.php?id=1002 题意:给你两个四位数的素数,求最少经过多少步的变化能够从一个素数变到另一个素数.在变 ...
- Sicily 1444: Prime Path(BFS)
题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...
- sicily 1500. Prime Gap
Description The sequence of n ? 1 consecutive composite numbers (positive integers that are not prim ...
- <Sicily>Prime Palindromes
一.题目描述 The number 151 is a prime palindrome because it is both a prime number and a palindrome (it i ...
- hdu 1002 prime 模板
Constructing Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- [1002]prime
输入一个数,判断其是否为素数: 本题有多组测试样例. 输入规则如下: 第一行为一个整数,样例组数T: 第二至第t+1行每行都有一个整数a(a >= 2),表示需要处理的数: 如果是素数则输出“y ...
- CSUFT 1002 Robot Navigation
1002: Robot Navigation Time Limit: 1 Sec Memory Limit: 128 MB Submit: 4 Solved: 2 Descript ...
- (Problem 49)Prime permutations
The arithmetic sequence, 1487, 4817, 8147, in which each of the terms increases by 3330, is unusual ...
随机推荐
- [AHOI 2009] 同类分布
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1799 [算法] 数位DP [代码] #include<bits/stdc++. ...
- [转]Linux常用命令学习
转自 https://www.cnblogs.com/gaojun/p/3359355.html 1.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文 ...
- Python笔记(五)
# -*- coding:utf-8 -*- # 函数 # python中定义函数的规则如下:以def开头,接函数名称和(),传入的参数和变量放在圆括号中间,函数以:起始,并且缩进,return选择性 ...
- HDU 3830 Checkers(二分+lca)
Description Little X, Little Y and Little Z are playing checkers when Little Y is annoyed. So he wan ...
- DirectUI界面编程(六)实现右键弹出菜单
本节向大家介绍一下右键弹出菜单是如何实现的.效果如下,在窗口中点击鼠标右键弹出菜单,点击菜单项能够响应菜单点击事件. 使用Duilib库实现的弹出菜单,实际上也是一个Windows窗口,因此我们需要创 ...
- 多帧图片转gif
示例 工具photosh cc2017 1: 文件--> 脚本--> 将文件载入堆栈--> 选择文件-->勾选窗口的时间轴-->底部 从图层建立帧--> 设置时间延 ...
- Java操作Kafka执行不成功
使用kafka-clients操作kafka始终不成功,原因不清楚,下面贴出相关代码及配置,请懂得指点一下,谢谢! 环境及依赖 <dependency> <groupId>or ...
- Android 的永久登陆 与注销登陆
一.永久登陆 sharedprefrence 存储 userID 以及 password private String FILE = "saveUserNamePwd";//用于 ...
- SQL Server中怎样可以从SELECT语句的结果集中删除重复行
首先要分析出现重复记录的原因,是不是有一些where条件没有加上,把该加的条件都加上如果还有结果集重复,考虑以下方法去重: 结果集中去除重复行可以使用函数[distinct]也可以使用分组语句[gro ...
- UVa 11549 Open Credit System
题意:给出n个数,找出两个整数a[i],a[j](i < j),使得a[i] - a[j]尽量大 从小到大枚举j,在这个过程中维护a[i]的最大值 maxai晚于ans更新, 可以看这个例子 1 ...