题目大意:

有一个数组 a 其中有 2n 个数,把它压缩进数组 b,b 的大小是 n-1。

所谓的“压缩”指的是两种操作:

  • 首先舍弃 a 当中的两个数(你可以任意选择)。
  • 然后每次取出剩下的数组 a 当中的两个数,把他们的和放入数组 b 当中。

要求最终 b 数组中所有数的最大公约数(gcd)要大于 1,即 gcd{b_1,b_2,...,b_n-1}>1

请你把你每一次从 a 中取出的两个数在原来的 a 中的下标输出,如果答案不唯一输出任意一种即可。

题解:

如题目所说,保证每一组数据都有解,那么为什么一定有解呢?

  首先,给定的序列里,数的种类可以分成奇数和偶数,对于奇数来说,每两个奇数的和是偶数,对于偶数来说,每两个偶数的和也一定是偶数。因此,我们只需要将2n-2个数取出,合并,使每个数都为偶数,即可保证最大公因数至少为二

  那么,我们应该如何取这2n-2个数呢?

  如何取数,受制于数列里奇数和偶数的个数。因为数列里的数的总数为2n为偶数,所以如果奇数的个数为奇数,那么偶数的个数也为奇数,这时候只需要奇数偶数分别扔一个出去即可保证两两之间有符合要求的匹配。如果奇数的个数为偶数,偶数的个数也为偶数,那么随便选奇数或偶数扔两个数出去即可(前提是你选中的这种数的类型(奇数or偶数)所包括的数的个数至少大于或等于二

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 2005;
struct p{
int num,pos;
p(){}
p(int nnum,int ppos){
nnum = nnum;
pos = ppos;
}
};//记录数列中每个数的大小和下标
vector<p> j,o;//j记录奇数,o记录偶数
int t,n,a[MAXN],cntj,cnto;
int main(){
cin >> t;
while(t--){
j.clear();
o.clear();
memset(a,0,sizeof a);
cin >> n;
for(int i = 1; i <= 2 * n; i++){
cin >> a[i];
if(a[i] % 2 == 1)j.push_back(p(a[i],i));//存数
else o.push_back(p(a[i],i));
}
if(j.size() % 2 == 0 && o.size() % 2 == 0){//判两种类型的数的个数的情况并进行相应的处理
for(int i = 2; i < j.size(); i+=2){
cout << j[i].pos << " " << j[i + 1].pos<< "\n";
}
for(int i = 0; i < o.size(); i+=2){
cout << o[i].pos<< " " << o[i + 1].pos << "\n";
}
}
else if(j.size() % 2 == 1 && o.size() % 2 == 1){
for(int i = 1; i < j.size(); i+=2){
cout << j[i].pos << " " << j[i + 1].pos << "\n";
}
for(int i = 1; i <o.size(); i+=2){
cout << o[i].pos<< " " << o[i + 1].pos<< "\n";
}
}
}
}

GCD Compression的更多相关文章

  1. Codeforces Round #651 (Div. 2) A Maximum GCD、B GCD Compression、C Number Game、D Odd-Even Subsequence

    A. Maximum GCD 题意: t组输入,然后输入一个n,让你在区间[1,n]之间找出来两个不相等的数a,b.求出来gcd(a,b)(也就是a,b最大公约数).让你求出来最大的gcd(a,b)是 ...

  2. Codeforces Round #651 (Div. 2) B. GCD Compression(数论)

    题目链接:https://codeforces.com/contest/1370/problem/B 题意 给出 $2n$ 个数,选出 $2n - 2$ 个数,使得它们的 $gcd > 1$ . ...

  3. Codeforces Round #651 (Div. 2) B. GCD Compression (构造)

    题意:有一个长度为\(2n\)的数组,删去两个元素,用剩下的元素每两两相加构造一个新数组,使得新数组所有元素的\(gcd\ne 1\).输出相加时两个数在原数组的位置. 题解:我们按照新数组所有元素均 ...

  4. Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用

    OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...

  5. iOS 多线程之GCD的使用

    在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...

  6. 【swift】BlockOperation和GCD实用代码块

    //BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...

  7. 修改版: 小伙,多线程(GCD)看我就够了,骗你没好处!

    多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这种能力的系 ...

  8. GCD的相关函数使用

    GCD 是iOS多线程实现方案之一,非常常用 英文翻译过来就是伟大的中枢调度器,也有人戏称为是牛逼的中枢调度器 是苹果公司为多核的并行运算提出的解决方案 1.一次性函数 dispatch_once 顾 ...

  9. hdu1695 GCD(莫比乌斯反演)

    题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...

随机推荐

  1. p2p-tunnel 打洞内网穿透系列(三)TCP转发访问内网web服务

    系列文章 p2p-tunnel 打洞内网穿透系列(一)客户端配置及打洞 p2p-tunnel 打洞内网穿透系列(二)TCP转发访问远程共享文件夹 p2p-tunnel 打洞内网穿透系列(三)TCP转发 ...

  2. 隔离这几天开发了一个带控制台的OAuth2授权服务器分享给大家

    停更这些天,业余时间和粉丝群的几个大佬合作写了一个基于Spring Authorization Server的OAuth2授权服务器的管理控制台项目Id Server,我觉得这个项目能够大大降低OAu ...

  3. Spring-Batch处理MySQL数据后存到CSV文件

    1 介绍 用Spring Batch实现了个简单的需求,从MySQL中读取用户表数据,根据生日计算年龄,将结果输出到csv文件. 1.1 准备表及数据 user test; DROP TABLE IF ...

  4. 11┃音视频直播系统之 WebRTC 进行文本聊天并实时传输文件

    一.RTCDataChannel WebRTC 不但可以让你进行音视频通话,而且还可以用它传输普通的二进制数据,比如说可以利用它实现文本聊天.文件的传输等 WebRTC 的数据通道(RTCDataCh ...

  5. SpirngBoot 错误(1)

    对于出现该错: Error starting ApplicationContext. To display the conditions report re-run your application ...

  6. GDB的简单使用一

    GDB的简单使用一 一.概念 二.GDB的基本使用方法一 调试前预备知识 获取进程的内核转储 启动gdb调试 1.启动 2.设置断点 3.运行程序 4.显示栈帧 5.显示变量 6.显示寄存器 7.单步 ...

  7. django框架4

    内容概要 编辑删除功能编写 虚拟环境 django路由层版本区别 视图函数的返回值 JsonResponse对象 form表单上传文件 request其他方法 FBV与CBV(基于函数的视图.基于类的 ...

  8. python基础学习9

    python基础学习 内容概要 字符编码的简介 字符编码的发展史 字符编码的实际应用 文件操作简介 文件读写模式 文件操作模式 文件操作方法 内容详情 字符编码的简介 # 字符编码主要研究的对象是文本 ...

  9. 解决跨海高并发崩溃难题?so easy

    近年来随着互联网强势的发展浪潮,越来越多的企业选择跨境出海,扩展海外市场.而想要在一个陌生市场最快速地吸引到用户,一定不能缺少的就是丰富多样的各类活动.然而活动在带来大流量的同时,也带来了一些问题,比 ...

  10. 技术分享 | 一步一步学测试平台开发-Vue restful请求

    本文节选自霍格沃兹测试学院内部教材 一般在构建应用时需要访问后端的 API 接口获取后端数据并展示.做这件事的方法有很多种(比如 axios,vue-resource,fetch-jsonp),使用 ...