栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

最小的和(多路归并)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

最小的和(多路归并)

地址:https://www.acwing.com/problem/content/3998/
来源:AcWing,第20场周赛

给定两个长度为 n 的整数序列 a1,a2,…,an 和 b1,b2,…,bn。

现在要对序列 a 进行恰好 k1 次操作,对序列 b 进行恰好 k2 次操作。

每次操作具体流程为选取序列中的一个元素,并将其加 1 或减 1。

要求所有操作进行完毕以后,∑i=1n(ai−bi)2 尽可能小。

输入格式
第一行包含三个整数 n,k1,k2。

第二行包含 n 个整数 a1,a2,…,an。

第三行包含 n 个整数 b1,b2,…,bn。

输出格式
一个整数,表示所有操作进行完毕以后,∑i=1n(ai−bi)2 的最小可能值。

数据范围
前六个测试点满足,1≤n≤5。
所有测试点满足,1≤n≤103,0≤k1+k2≤103,k1 和 k2 都是非负整数,−106≤ai,bi≤106。

输入样例1:
2 0 0
1 2
2 3
输出样例1:
2
输入样例2:
2 1 0
1 2
2 2
输出样例2:
0
输入样例3:
2 5 7
3 4
14 4
输出样例3:
1

需要注意的点:
数据规模不大,可以试着用朴素做法。
数据范围较大,平方后会爆int,所以用long long
当剩余操作数不为0时,并且差值都为0后,奇数为1,偶数为0;

#include 
#include 
#include 
#include 
using namespace std;
int main()
{
    int n,k1,k2;
    cin>>n>>k1>>k2;
    long long int num[n],num1[n],num2[n];
    for(int i=0;i>num[i];
    for(int i=0;i>num1[i];
        num2[i]=abs(num[i]-num1[i]);
    }
    int k=k1+k2;
    long long int sum=0;
    for(int i=0;inum2[t])//查找最大的数 
            t=j;
        }
        if(!num2[t])//如果所有数都为0
        {
            sum=(k-i)%2;
            break;
        }
        num2[t]--;
    }
    for(int i=0;i
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311714.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号