Codeforces 798D:Mike and distribution

本文介绍Codeforces798D题目的解题思路及实现代码。针对两个数列,通过选取部分元素使这部分元素之和大于剩余元素之和。文章详细描述了解决方案,并提供了完整的C++代码实现。

Codeforces 798D:Mike and distributio

题目链接:http://codeforces.com/problemset/problem/798/D

题目大意:给出两个大小为$n$的数列$A,B$,现要求从这两个数列相同位置取出$K(K \leqslant n/2+1)$个数,使得$2 \times subA>sumA$且$2 \times subB>sumB$.

想法题

我们需要从数列$A$和数列$B$中取出$K$个数,使得这$K$个数的和比剩下$n-K$个数的和大,显然$K=n/2+1$.

考虑一个大小为偶数$m$的数组,将数组分成$m/2$组,每两个数取较大数,则取出的数的和一定比剩下的数的和大.

讨论$n$为奇数的情况,将数组$A$降序排序,先取出最大的$A_x$和相对应的$B_y$。

剩下$m=n-1$($m$为偶数)个数,按顺序两两分成一组,每两个数取对应数组$B$中较大数,保证了$subB>sumB-subB$,而由$A$数组的单调性,不难得出$subA>sumA-subA$.

同理可以证明$n$为偶数时算法的正确性.

复杂度为$O(nlgn)$.

代码如下:

 1 #include <cstdio>
 2 #include <algorithm>
 3 #define N 100005
 4 using namespace std;
 5 typedef long long ll;
 6 int n,a[N],b[N],p[N];
 7 bool cmp(int x,int y){
 8     return a[x]>a[y];
 9 }
10 int main(void){
11     scanf("%d",&n);
12     for(int i=0;i<n;++i)scanf("%d",&a[i]);
13     for(int i=0;i<n;++i)scanf("%d",&b[i]);
14     for(int i=0;i<n;++i)p[i]=i;
15     sort(p,p+n,cmp);
16     printf("%d\n",n/2+1);
17     printf("%d",p[0]+1);
18     for(int i=1;2*i<n;++i){
19         int x=p[2*i-1],y=p[2*i];
20         if(b[x]<b[y])printf(" %d",y+1);
21         else printf(" %d",x+1);
22     }
23     if(n%2==0)printf(" %d",p[n-1]+1);
24 }

 

转载于:https://www.cnblogs.com/barrier/p/6747372.html

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值