嘟嘟嘟

这道题正解是怎么对的其实我也不清楚,总之靠感性理解吧。

首先当然要把1到n / 2的素数都筛出来,因为两两能配对的数一定都是这些素数的倍数。这也就说明对于(n / 2, n]的素数,他们一定不能配对,所以就不用筛他们了。

筛完后我们考虑怎么配对,对于一个素数的所有倍数xi,他们任意两个都可以配对,但是可能配对完后得到的总配对数会减少。因此我们从最大的素数开始两两配对,感性理解就是越大的素数的倍数就越少,因此先尽量满足配对方案少的素数,然后再处理配对方案多的素数。

还有一点,就是当xi的倍数中没有配对的数是奇数个的时候,就会多出来一个,那么我们应该把哪一个丢出来呢?还是按照上面贪心的方法想:丢出来的数成功配对的可能性越大越好,即他的最小质因子越小越好。那么就应该丢掉2 * xi

讲 完 了

 #include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define rg register
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-;
const int maxn = 1e5 + ;
inline ll read()
{
ll ans = ;
char ch = getchar(), last = ' ';
while(!isdigit(ch)) {last = ch; ch = getchar();}
while(isdigit(ch)) {ans = ans * + ch - ''; ch = getchar();}
if(last == '-') ans = -ans;
return ans;
}
inline void write(ll x)
{
if(x < ) x = -x, putchar('-');
if(x >= ) write(x / );
putchar(x % + '');
} bool vis[maxn];
struct Node
{
int x, y;
}ans[maxn];
int n, cnt = ; int prime[maxn], v[maxn];
void init(int n)
{
for(int i = ; i <= n; ++i)
{
if(!v[i]) v[i] = i, prime[++prime[]] = i;
for(int j = ; i * prime[j] <= n && j <= prime[]; ++j)
{
if(prime[j] > v[i]) break;
v[i * prime[j]] = prime[j];
}
}
} int main()
{
n = read();
init(n >> );
for(int i = prime[]; i; --i)
{
int flg = ; int las = ;
for(int j = prime[i]; j <= n; j += prime[i]) if(!vis[j]) flg ^= ; //记录奇偶
for(int j = prime[i]; j <= n; j += prime[i])
{
if(j == (prime[i] << ) && flg && prime[i] != ) continue;
if(las && !vis[j])
{
vis[j] = ;
ans[++cnt] = (Node){las, j};
las = ;
}
else if(!las && !vis[j]) las = j, vis[j] = ;
}
}
write(cnt); enter;
for(int i = ; i <= cnt; ++i) write(ans[i].x), space, write(ans[i].y), enter;
return ;
}

CF449C Jzzhu and Apples的更多相关文章

  1. CF449C Jzzhu and Apples (筛素数 数论?

    Codeforces Round #257 (Div. 1) C Codeforces Round #257 (Div. 1) E CF450E C. Jzzhu and Apples time li ...

  2. CF449 C. Jzzhu and Apples

    /* http://codeforces.com/problemset/problem/449/C cf 449 C. Jzzhu and Apples 数论+素数+贪心 */ #include &l ...

  3. Codeforces 449C Jzzhu and Apples 贪心 (看题解)

    Jzzhu and Apples 从大的质因子开始贪心, 如果有偶数个则直接组合, 如果是奇数个留下那个质数的两倍, 其余两两组合. #include<bits/stdc++.h> #de ...

  4. Codeforces Round #257 (Div. 2) E题:Jzzhu and Apples 模拟

    E. Jzzhu and Apples time limit per test 1 second memory limit per test 256 megabytes input standard ...

  5. Codeforces 449.C Jzzhu and Apples

    C. Jzzhu and Apples time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. CF 450E Jzzhu and Apples 数学+模拟

    E. Jzzhu and Apples time limit per test 1 second memory limit per test 256 megabytes input standard ...

  7. Codeforces 450E:Jzzhu and Apples(构造,数学)

    E. Jzzhu and Apples time limit per test: 1 seconds memory limit per test: 256 megabytes input: stand ...

  8. CF449C:Jzzhu and Apples

    题意简述 给出正整数n,你要把1-n之间的正整数分成尽可能多组,使得每一组两个数的最大公约数大于1;输出能分成最多组的个数,并按任意顺序输出每组的两个数. 很妙的一道题. 首先我们考虑去处理每个质数的 ...

  9. CF449C:Jzzhu and Apples——题解

    https://vjudge.net/problem/CodeForces-449C 题目大意:1-n编号的苹果两两一对,他们的最大公约数不为1,求这些对的最大匹配. ———————————————— ...

随机推荐

  1. c#实现wifi连接器

    前言 一般正常情况下都会用windows自带的wifi连接,但是为了给用户更好的体验,或者有时候需要检测wifi状态,还是需要集成到项目中态. 原理 1.微软自带Native Wifi API,不过是 ...

  2. AWS and OpenStack

    AWS OpenStack EC2 Nova EBS Cinder EFS Manila S3 Swift Storage Gateway 本地上云 ClondFront 内容发布服务 VPC Neu ...

  3. python读取excel表格生成sql语句 第一版

    由于单位设计数据库表·,都用sql.不知道什么原因不用 powerdesign或者ermaster工具,建表很痛苦  作为程序猿当然要想办法解决,用Python写一个程序解决 需要用到 xlrd li ...

  4. Understanding Java 8 Streams API---reference

    http://java.amitph.com/2014/01/understanding-java-8-streams-api.html Since past few versions, Java h ...

  5. 安装 VS 2015 Update 2 + Windows SDK Tools 1.3.1 + Windows SDK 10586.212 后提示找不到 10586.0 SDK 问题的解决方法

    将 Visual Studio 2015 升级到 Update 2,并安装 Windows SDK Tools 1.3.1 和 Windows SDK 10586.212 后,有可能造成原本已安装的 ...

  6. 【学习笔记】HTML基础:使用html制作网页

    一.初识HTML 1.什么是HTML? Hyper Text Markup Language(超文本标记语言) 扩展XML:Extendsible  Markup Language(可扩展性标记语言) ...

  7. 堆(Heap)的实现

    这次实现了堆,这个堆不是指系统堆栈的堆,是一种数据结构,见下图 堆的本质就是一个数组(上图中,红色的是值,黑色的是下标)简单的来说就是把一个数组看成是二叉树,就像上图 大堆和小堆分别是指根节点比孩子节 ...

  8. win10下MySQL 5.7.20解压版安装步骤

    1.从官网下载MySQL5.7.20解压版64位:https://dev.mysql.com/downloads/file/?id=473309. 2.解压(我的解压路径为:E:\mysql-5.7. ...

  9. chosen下拉框插件的使用

    效果如下 第一步: 第二步: 根据HTML5规范, 通常在引入CSS和JS时不需要指明 type,因为 text/css 和 text/javascript 分别是他们的默认值. <link r ...

  10. Learn by pictures on Computer Fields