土题大战Vol.0 A. 笨小猴 思维好题

题目描述

驴蛋蛋有 \(2n + 1\) 张 \(4\) 星武器卡片,每张卡片上都有两个数字,第 \(i\) 张卡片上的两个数字分别是 \(A_i\) 与 \(B_i\)。

现在驴蛋蛋要从所有卡片中选出恰好 \(n + 1\) 张卡片,然后计算他选出的所有卡片中 \(A_i\) 的和与 \(B_i\) 的和。他的目的是要使他选出的卡片的\(A_i\) 的和与 \(B_i\) 的和,都要分别大于剩下 \(n\) 张没选的卡片的 \(A_i\) 的和与 \(B_i\) 的和。

驴蛋蛋最近沉迷于周年挑战赛,所以他希望你能帮他解决这个问题。

输入格式

输入第一行是一个整数 \(n\),意义如以上所示。

接下来有 \(2n + 1\) 行,每行为两个正整数,第 \(i\) 行的两个正整数分别代表 \(A_i\) 和 \(B_i\)。

输出格式

如果无法选出 \(n + 1\) 张卡片满足驴蛋蛋的要求,输出一个数 \(-1\)。

否则输出 \(n + 1\) 行,每 行有一个正整数,表示选出的卡片编号(从 \(1\) 开始)。如果有多解,输出任意一组解均可

样例

样例输入

2

4 2

9 4

5 3

7 5

8 1

样例输出

3

4

2

样例解释

选择顺序随意,选择第二,三,四张三张卡片,\(A\)的总和为\(21\),\(B\)的总和为\(12\),均大于剩下的卡片\(A\),\(B\)之和。

数据范围与提示

共\(10\)组测试数据

对于前\(3\)组测试数据有第\(p\)组中\(N=2 \times p+1\)

对于后7组测试数据有第\(p\)组中\(N=p\times 10000\)

对所有测试数据\(1 \leq A_i,B_i \leq 10^9\)

如果你通过某种方法\(hack\)掉了评测插件,你可以申请获得该测试点的分数\(=ω=\)

分析

先画一个图便于理解

我们先按照\(B\)的值从小到大排序,把序列中的最后一个元素单独拿出来选上,剩下的两两一组

在两两一组中,我们选取\(A\)的值较大的那一个,这样我们就可以把\(A\)元素的条件满足

对于\(B\)元素来说,我们选择的元素的差值是图中红色的部分

我们会发现,在最坏的情况下,红色部分拼起来的总和也不会超过最后一个元素的\(B\)值

也就是说,我们选择的\(B\)元素的值一定大于剩下的\(B\)元素的值

所以,我们只需要简单排序即可

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
typedef long long ll;
ll pja,pjb;
struct asd{
ll xx,yy;
int bh;
}b[maxn];
bool cmp(asd aa,asd bb){
return aa.yy<bb.yy;
}
int n,m,top,sta[maxn];
int main(){
scanf("%d",&n);
m=n*2+1;
for(int i=1;i<=m;i++){
scanf("%lld%lld",&b[i].xx,&b[i].yy);
b[i].bh=i;
}
sort(b+1,b+1+m,cmp);
m--;
for(int i=1;i<=m;i+=2){
if(b[i].xx>b[i+1].xx) sta[++top]=b[i].bh;
else sta[++top]=b[i+1].bh;
}
sta[++top]=b[m+1].bh;
for(int i=1;i<=top;i++){
printf("%d\n",sta[i]);
}
return 0;
}

土题大战Vol.0 A. 笨小猴 思维好题的更多相关文章

  1. 金题大战Vol.0 A、凉宫春日的叹息

    金题大战Vol.0 A.凉宫春日的叹息 题目描述 给定一个数组,将其所有子区间的和从小到大排序,求第 \(k\) 小的是多少. 输入格式 第一行两个数\(n\),$ k\(,表示数组的长度和\)k$: ...

  2. 金题大战Vol.0 B、序列

    金题大战Vol.0 B.序列 题目描述 给定两个长度为 \(n\) 的序列\(a\), \(b\). 你需要选择一个区间\([l,r]\),使得\(a_l+-+a_r>=0\)且\(b_l+-+ ...

  3. 金题大战Vol.0 C、树上的等差数列

    金题大战Vol.0 C.树上的等差数列 题目描述 给定一棵包含\(N\)个节点的无根树,节点编号\(1-N\).其中每个节点都具有一个权值,第\(i\)个节点的权值是\(A_i\). 小\(Hi\)希 ...

  4. 火题大战Vol.0 B 计数DP

    火题大战Vol.0 B 题目描述 \(n\) 个沙茶,被编号 \(1\)~$ n$.排完队之后,每个沙茶希望,自己的相邻的两人只要无一个人的编号和自己的编号相差为 \(1\)(\(+1\) 或\(-1 ...

  5. 水题大战Vol.3 B. DP搬运工2

    水题大战Vol.3 B. DP搬运工2 题目描述 给你\(n,K\),求有多少个\(1\)到\(n\) 的排列,恰好有\(K\)个数\(i\) 满足\(a_{i-1},a_{i+1}\) 都小于\(a ...

  6. 火题大战Vol.1 A.

    火题大战Vol.1 A. 题目描述 给定两个数\(x\),\(y\),比较\(x^y\) 与\(y!\)的大小. 输入格式 第一行一个整数\(T\)表示数据组数. 接下来\(T\)行,每行两个整数\( ...

  7. noip2008 笨小猴

    P1125 笨小猴 1.6K通过 3.7K提交 题目提供者该用户不存在 标签模拟2008NOIp提高组 难度普及- 提交该题 讨论 题解 记录   题目描述 笨小猴的词汇量很小,所以每次做英语选择题的 ...

  8. [TYVJ] P1010 笨小猴

    笨小猴 背景 Background NOIP2008复赛提高组第一题   描述 Description 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种 ...

  9. 洛谷-笨小猴-NOIP2008提高组复赛

    题目描述 Description 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设m ...

随机推荐

  1. 时间复杂度为O(nlogn)的排序算法

    时间复杂度为O(nlogn)的排序算法(归并排序.快速排序),比时间复杂度O(n²)的排序算法更适合大规模数据排序. 归并排序 归并排序的核心思想 采用"分治思想",将要排序的数组 ...

  2. Go 中读取命令参数的几种方法总结

    前言 对于一名初学者来说,想要尽快熟悉 Go 语言特性,所以以操作式的学习方法为主,比如编写一个简单的数学计算器,读取命令行参数,进行数学运算. 本文讲述使用三种方式讲述 Go 语言如何接受命令行参数 ...

  3. C语言中的 “>>”与“<<”

    1. ">>" int x = 16; printf("%d\n", x >> 1); 先将x转成二进制 10000, 不读最后一位, ...

  4. 挖地雷dp c++

    // // Created by Arc on 2020/4/27. // /*题文: * 在一个地图上有n个地窖 * ,每个地窖中没有一定数量的地雷, * 同时给出地窖之间连接的路径, * 并规定路 ...

  5. 微服务迁移记(五):WEB层搭建(1)

    WEB层是最终表现层,注册至注册中心,引用接口层(不需要引用实现层).公共服务层.用户登录使用SpringSecurity,Session保存在redis中,权限管理没有用SpringSecurity ...

  6. ref以及传值传址的理解

    ref(也包括out)关键字肯定都会用,传值调用和传址调用也是初学写代码时都已经历过的话题,与这相关的还有一些话题,比如值类型和引用类型有什么区别等,但是如果不仔细,可能有一些概念的混淆或者理解不够清 ...

  7. PHP strnatcasecmp() 函数

    实例 使用"自然"算法来比较两个字符串(不区分大小写): <?php高佣联盟 www.cgewang.comecho strnatcasecmp("2Hello w ...

  8. PHP hex2bin() 函数

    实例 把十六进制值转换为 ASCII 字符: <?phpecho hex2bin("48656c6c6f20576f726c6421");?> 以上实例输出结果: He ...

  9. PHP hebrev() 函数

    实例 反向显示希伯来字符: <?phpecho hebrev("á çùåï äúùñâ");?>高佣联盟 www.cgewang.com 定义和用法 hebrev() ...

  10. 6.15 省选模拟赛 老魔杖 博弈论 SG函数

    这道题确实没有一个很好的解决办法 唯一的正解可能就是打表找规律 或者 直接猜结论了吧. 尽管如此 在此也给最终结论一个完整的证明. 对于70分 容易发现状态数量不大 可以进行暴力dp求SG函数. 原本 ...