CodeFores 665D Simple Subset(贪心)】的更多相关文章

D. Simple Subset time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output A tuple of positive integers {x1, x2, ..., xk} is called simple if for all pairs of positive integers (i,  j) (1  ≤ i  <  j …
题意: 给你n个数,让你从中选一个子集要求子集中的任何两个数相加都是质数. 思路: 一开始把自己坑了,各种想,后来发现一个简单的性质,那就是两个数相加的必要条件是这两个数之中必定一个奇数一个偶数,(除了含有1 集合以外,1+1等于2也是质数). 考虑两种情况,有1存在和1不存在这两种. 很显然1存在的情况下,所有的1都可以同时在集合中出现,要想集合最大不能加奇数,只能加偶数,那么我们看原始集合中是否有偶数加一是素数. 不考虑1的情况下,这样的子集最大是2,只有存在一个奇数一个偶数相加是质数的情况…
题目链接 给一个数列, 让你选出其中的m个数, 使得选出的数中任意两个数之和都为质数, m尽可能的大. 首先, 除了1以外的任意两个相同的数相加结果都不是质数. 然后, 不考虑1的话, 选出的数的个数不大于2. 假设我们选了3个数, a1, a2, a3. a1+a2是质数的话, 那么a1, a2中一个为奇数一个为偶数. 那么如果a3无论为奇数或偶数都无法满足条件了. 所以我们按1出现的次数分类讨论一下就好了. #include <iostream> #include <vector&g…
//题意:给你n个数(可能有重复),问你最多可以取出多少个数使得任意两个数之和为质数.//题解:以为是个C(2,n)复杂度,结果手摸几组,发现从奇偶性考虑,只有两种情况:有1,可以取出所有的1,并可以再取一个偶数(如果这个偶数+1是质数).没有1,如果取了一个奇质数,那只能再拿一个2(如果有2的话). 坑:一度把题目记错了,以为输入的是质数,结果比赛的时候一直wa到orz ac代码: #include<iostream> #include<stdio.h> #include<…
题目链接: http://codeforces.com/problemset/problem/665/D 题意: 给定序列,从中找出最大的子集,使得子集中的数两两相加均为质数. 分析: 貌似有用最大团做的.可是不会,名字太难听也不是很想学. n只有1000,暴力一发. 如果集合中有1的话,把所有1都放进去,我们最多再找一个偶数. 如果不考虑1的话,两个奇数,两个偶数相加均为偶数,所以最多找一个奇数和一个偶数. 枚举之后判断一下是否为质数就好了. 我觉得整个序列找不到两两相加为质数的时候的说明不是…
题目链接: D. Simple Subset time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output A tuple of positive integers {x1, x2, ..., xk} is called simple if for all pairs of positive integers (i,  j) (1  ≤ i …
D. Simple Subset 题目连接: http://www.codeforces.com/contest/665/problem/D Description A tuple of positive integers {x1, x2, ..., xk} is called simple if for all pairs of positive integers (i,  j) (1  ≤ i  <  j ≤ k), xi  +  xj is a prime. You are given a…
C. Simple Strings 题目连接: http://www.codeforces.com/contest/665/problem/C Description zscoder loves simple strings! A string t is called simple if every pair of adjacent characters are distinct. For example ab, aba, zscoder are simple whereas aa, add a…
贪心,如果m分成的两个区间长度不相等,那么选长的那个区间最接近m的位置,否则选m-1位置,特判一下n等于1的情况 #include<bits/stdc++.h> using namespace std; int main() { int n,m; scanf("%d%d",&n,&m); ){ printf(; } , d2 = n-m; if(d1<d2){ printf(); }else { printf(); } ; }…
题意 在一颗有点权的树上,选若干个点,使得这些点两两距离大于k,且点权和最大 思路 贪心的取比较大的值即可 将所有点按照深度从大到小排序,如果当前点点权\(a[i]\)大于0,则将距离为k以内的所有点减\(a[i]\) 代表取了当前点,为答案贡献\(a[i]\) 如果下面又扫到大于零的点权,说明那个点比这个大,于是取那个 复杂度\(O(n^2)\) 代码 int n,k; int a[maxn],b[maxn]; vector<int>v[maxn]; int ans; int dep[max…