题目链接:

http://codeforces.com/problemset/problem/665/D

题意:

给定序列,从中找出最大的子集,使得子集中的数两两相加均为质数。

分析:

貌似有用最大团做的。可是不会,名字太难听也不是很想学。

n只有1000,暴力一发。

如果集合中有1的话,把所有1都放进去,我们最多再找一个偶数。

如果不考虑1的话,两个奇数,两个偶数相加均为偶数,所以最多找一个奇数和一个偶数。

枚举之后判断一下是否为质数就好了。

我觉得整个序列找不到两两相加为质数的时候的说明不是很清楚,wa了之后才知道找不到的话直接输出任何一个数。

代码:

#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
using namespace std;
vector<int>v1,v2,v, vv;
const int maxn = 1e3 + 5, maxm = 1e6+ 5;
int a[maxn];
bool isprime[2 * maxm];
void init()
{
memset(isprime, true, sizeof(isprime));
isprime[1] = false;
for(int i = 2; i < 2 * maxm; i++){
if(isprime[i]){
for(int j = 2 * i; j < 2 * maxm; j += i){
isprime[j] = false;
}
}
}
}
int main (void)
{
int n;
scanf("%d", &n);
bool flg = false;
init();
for(int i = 0; i < n; i++){
scanf("%d", &a[i]);
if(a[i] == 1){flg = true;v.push_back(1);}
else if(a[i] & 1) v1.push_back(a[i]);
else v2.push_back(a[i]);
}
if(flg){
for(int i = 0; i < v2.size(); i++){
if(isprime[v2[i] + 1]) {
v.push_back(v2[i]);
break;
}
}
}
bool flag = true;
if(v.size() < 2){
for(int i = 0; i < v1.size(); i++){
for(int j = 0; j < v2.size(); j++){
if(isprime[v1[i] + v2[j]]){ vv.push_back(v1[i]);vv.push_back(v2[j]);flag = false;break;}
}
if(!flag) break;
}
}
if(v.size() == 0){v.push_back(a[0]);}
if(vv.size() < v.size()){
printf("%d\n", v.size());
for(int i = 0; i < v.size(); i++) printf("%d ", v[i]);
}else {
printf("%d\n", vv.size());
for(int i = 0; i < vv.size(); i++) printf("%d ", vv[i]);
}
return 0;
}

Codeforces 665D Simple Subset【构造】的更多相关文章

  1. Codeforces 665D Simple Subset [简单数学]

    题意: 给你n个数,让你从中选一个子集要求子集中的任何两个数相加都是质数. 思路: 一开始把自己坑了,各种想,后来发现一个简单的性质,那就是两个数相加的必要条件是这两个数之中必定一个奇数一个偶数,(除 ...

  2. codeforces 665D Simple Subset

    题目链接 给一个数列, 让你选出其中的m个数, 使得选出的数中任意两个数之和都为质数, m尽可能的大. 首先, 除了1以外的任意两个相同的数相加结果都不是质数. 然后, 不考虑1的话, 选出的数的个数 ...

  3. CodeForces - 665D Simple Subset 想法题

    //题意:给你n个数(可能有重复),问你最多可以取出多少个数使得任意两个数之和为质数.//题解:以为是个C(2,n)复杂度,结果手摸几组,发现从奇偶性考虑,只有两种情况:有1,可以取出所有的1,并可以 ...

  4. CodeFores 665D Simple Subset(贪心)

    D. Simple Subset time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  5. Educational Codeforces Round 12 D. Simple Subset 最大团

    D. Simple Subset 题目连接: http://www.codeforces.com/contest/665/problem/D Description A tuple of positi ...

  6. coeforces 665D D. Simple Subset(最大团orsb题)

    题目链接: D. Simple Subset time limit per test 1 second memory limit per test 256 megabytes input standa ...

  7. CodeForces 837D - Round Subset | Educational Codeforces Round 26

    /* CodeForces 837D - Round Subset [ DP ] | Educational Codeforces Round 26 题意: 选k个数相乘让末尾0最多 分析: 第i个数 ...

  8. Codeforces 626E Simple Skewness(暴力枚举+二分)

    E. Simple Skewness time limit per test:3 seconds memory limit per test:256 megabytes input:standard ...

  9. Codeforces 837D Round Subset - 动态规划 - 数论

    Let's call the roundness of the number the number of zeros to which it ends. You have an array of n ...

随机推荐

  1. shell脚本,awk如何处理文件中上下关联的两行。

    文件d.txt如下内容 ggg 1portals: 192.168.5.41:3260werew 2portals: 192.168.5.43:3260 如何把文件d.txt内容变为如下内容 ggg  ...

  2. 高德定位腾讯定位在APP上无法开启定位权限的解决方案

    [备注]公司项目中遇到的问题,如果你在团队工作其中定有不少配合方面的问题,其中的思路是可以借鉴的,因为这也许正是你们现在遇到的问题,总结的不好的地方还请多多指教 因为项目需求的确定,定位成了必不可少的 ...

  3. C++笔记(仅C++特性,需C语言基础)

    C++复习笔记一(类的声明定义应用与构造函数析构函数部分)const在C语言中是"不能被改变值的变量",而在C++种子则是"一种有类型描述的常量",常量必须初始 ...

  4. 删除链表的倒数第N个节点(三种方法实现)

    删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒 ...

  5. LeetCode 字符串的排列

    给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列. 换句话说,第一个字符串的排列之一是第二个字符串的子串. 示例1: 输入: s1 = "ab" s2 ...

  6. 计算机完全卸载mysql

    编写时间:15:07:02(2018年9月23日) 1.停止mysql服务. “运行”——>“cmd”——>输入“net stop mysql;” 看链接: https://blog.cs ...

  7. service worker 消息推送

    https://developers.google.com/web/fundamentals/codelabs/push-notifications/?hl=en 首先下载源码: git clone ...

  8. 《嵌入式linux应用程序开发标准教程》笔记——9.多线程编程

    线程是轻量级进程,创建线程的开销要比进程小得多,在大型程序中应用广泛. 9.1 线程概述 进程包含自己的代码.数据.堆栈.资源等等,创建和切换的开销比较大: 线程是轻量级的进程,调度的最小单元,同一个 ...

  9. PyQt5(1)——QToolTip, QPushButton, QMessageBox, QDesktopWidget

    #面向对象方法 import sys from PyQt5.QtWidgets import QApplication, QWidget, QToolTip, QPushButton, QMessag ...

  10. JavaScript内建对象-String

    JavaScript中通过双引号或单引号界定一个字符串. String对象只有一个属性:length属性,得到字符串的长度. 处理字符串本身的方法 charAt(index) 返回字符串中index指 ...