PTA----->选我啊!

一,题目:

HBU最近在进行花美男的选举,候选人是A同学和B同学。

HBU一共有n个学院,其中第i个学院有ai​名同学支持A同学,bi​名同学支持B同学。

但是,B同学可以在每个学院发表演讲来获得更多的同学对他的支持。

如果B同学在某个学院进行了一场演讲,那么这个学院的全部同学都会支持他,包括原来支持A同学的那些同学。

相反,如果B同学不在某个学院发表演讲,那么这个学院中原来支持A同学的那些同学还会支持A同学,但是那些原来支持B同学的同学们将不再支持B同学,他们会变的中立——谁也不支持。

请你求出B同学最少在几个学院发表演讲才能让支持他的同学人数超过支持A同学的人数。

输入格式

第一行一个正整数n。

后面n行,每行两个正整数(ai​,bi​),分别代表第i个学院中支持A同学的人数和支持B同学的人数。

1≤n≤2×1e5

1 ≤ai​,bi​≤1e9

输出格式

请输出答案

测试样例一
4
2 1
2 2
5 1
1 3
1

说明:如果B同学在第三个学院发表演讲的话,支持A同学的人数将变为5人,支持B同学的人数将变为6人,满足条件。

测试样例二
5
2 1
2 1
2 1
2 1
2 1
3
测试样例三
1
273 691
1

二,思路:

对于这题排序大家应该都想的到,但是该按怎样的循序来排序,是有点难想的。如果排序条件,无法直接看出来的化,最好利用数学推导一下(最好不要想当然),因为数学是严谨的。以下是我的推导过程。

 

由上图可知,当2*ai+bi越大,我们就会选的越少。故我们可以自定以下排序规则。

三,代码:

#include <iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<set>
#include<stack>
#include<queue>
#include<map>
using namespace std;

#define  x first
#define y second

const int N=2e5+10,M=1e9+7;

typedef  long long ll;
typedef pair<int,int> pii;

struct Node{
   ll a,b;
}arr[N];

//自定义排序规则
bool cmp(Node v,Node w){
    if(2*v.a+v.b!=2*w.a+w.b) return 2*v.a+v.b>2*w.a+w.b;
    return false;
}

void Solved() {
    int n;
    cin>>n;

//先算出A的初始人数
    ll suma=0;
    for(int i=1;i<=n;i++){
        int a,b;
        cin>>a>>b;

        arr[i]={a,b};
        suma+=a;
    }

    sort(arr+1,arr+1+n,cmp);

//表示我们选择的支持B人数和
    ll sumb=0;

//选择了几个学院
    int flag=-1;

    for(int i=1;i<=n;i++){

        sumb+=arr[i].a+arr[i].b;
        suma-=arr[i].a;
        if(sumb>suma){
            flag=i;
            break;
        }
    }

    cout<<flag<<endl;

}

int main()
{
    int t;
    t=1;

    while(t--) {
        Solved();
    }
    return 0;
}

 

针对你提出的关于在Linux系统中利用Bluez框架实现蓝牙设备扫描、连接以及音频流传输的问题,推荐仔细阅读《蓝牙驱动与Bluez操作流程详解》。该文档全面解析了蓝牙技术在Linux中的实现,从蓝牙驱动的初始化到高级音频流传输协议的使用,都进行了深入的讲解,非常适合你当前的需求。 参考资源链接:[蓝牙驱动与Bluez操作流程详解](https://wenku.csdn.net/doc/3g6ti5hbu6?spm=1055.2569.3001.10343) 首先,在Linux系统中,利用Bluez框架进行蓝牙设备扫描通常涉及hcitool命令的使用。hcitool是一个命令行工具,允许用户与蓝牙设备进行交互。例如,使用命令'hcitool scan'可以开始扫描附近的蓝牙设备。内核层面上,Bluez利用HCI(Host Controller Interface)协议与蓝牙控制器通信,HCIATTACH则是初始化蓝牙控制器的关键过程。UART层是蓝牙硬件与控制器之间的串行通信协议,负责传输实际的数据。 对于蓝牙设备的连接和音频流传输,A2DP(Advanced Audio Distribution Profile)和HFP/HSP(Hands-Free Profile/Headset Profile)是两个重要协议。A2DP允许高质量音频流的传输,主要在立体声音响设备上使用。而HFP/HSP则专注于语音通信,如在手机耳机中常见。初始化音频设备时,通常需要配置L2CAP(Logical Link Control and Adaptation Protocol)通道,它是蓝牙中用于建立数据链路的协议。 在数据传递方面,蓝牙设备在内核层面上通过HCI协议进行通信,数据包首先通过UART层进行传输,然后到HCI层进行进一步处理。对于A2DP,数据流的传输涉及到了AVDTP(Audio/Video Distribution Transport Protocol),这是一个支持音频和视频数据流传输的协议。而HFP/HSP则涉及到SCO(Synchronous Connection Oriented)连接,用于传输语音数据。 结合《蓝牙驱动与Bluez操作流程详解》提供的信息,你可以深入理解每个过程的细节,如UART层数据接收和处理流程,以及HCI层与BCSP层的交互机制。此外,文档中还会涉及对各个蓝牙协议的详细分析和使用示例,如L2CAP、AVDTP以及HFP/HSP协议在蓝牙音频流传输中的应用。 为了全面掌握Bluez框架和蓝牙技术的应用,建议你在解决当前问题后继续深入学习该文档的其他内容,特别是关于蓝牙安全、设备配对、服务发现等高级话题,这将对你未来在蓝牙技术领域的研究和开发工作大有裨益。 参考资源链接:[蓝牙驱动与Bluez操作流程详解](https://wenku.csdn.net/doc/3g6ti5hbu6?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值