博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CodeForces - 960B Minimize the error (思维,贪心)
阅读量:2135 次
发布时间:2019-04-30

本文共 921 字,大约阅读时间需要 3 分钟。

题目大意:

      给你两个数组a,b,你可以对a数组进行k1次操作,每次操作可以选择a数组的一个元素对其+1或-1,对b数组进行k2次操作,每次操作可以选择b数组的一个元素对其+1或-1,最后计算,问E的最小值是多少

题解:

      我们肯定要优先把差距大的给缩小,因为差距大的一平方之后差距会更大,就比如数组元素个数为4,a1和b1,a2和b2,a3和b3的差距都为1,a4和b4差距为3,而我们只能进行k1+k2=3次操作的话,肯定要优先对a4和b4缩小差距,前三个的差距和不过是3*1^{2}=3,而a4和b4的话3^{2}=9

      至于k1,k2必须要全用完的问题,完全可以选择一个数对它加一再减一,所以最后剩下的k1+k2,如果是奇数,就在最后结果+1,偶数的话完全可以两两操作抵消掉

     也可以用优先队列来做

#include
#include
#include
#include
#define ll long longusing namespace std;struct node{ ll a,b,c;} a[1010];bool cmp(node a,node b){ return a.c>b.c;}int main(){ int n,k1,k2; cin>>n>>k1>>k2; for(int i=0; i
>a[i].a; for(int i=0; i
>a[i].b; a[i].c=abs(a[i].b-a[i].a); } sort(a,a+n,cmp); bool flag=1; while(k1 && flag) { flag=0; if(a[0].c>0) { a[0].c--; k1--; flag=1; } sort(a,a+n,cmp); } flag=1; while(k2 && flag) { flag=0; if(a[0].c>0) { a[0].c--; k2--; flag=1; } sort(a,a+n,cmp); } ll ans(0); for(int i=0; i

 

转载地址:http://skfgf.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】118-Pascal's Triangle
查看>>
【LEETCODE】119-Pascal's Triangle II
查看>>
【LEETCODE】88-Merge Sorted Array
查看>>
【LEETCODE】19-Remove Nth Node From End of List
查看>>
【LEETCODE】125-Valid Palindrome
查看>>
【LEETCODE】28-Implement strStr()
查看>>
【LEETCODE】6-ZigZag Conversion
查看>>
【LEETCODE】8-String to Integer (atoi)
查看>>
【LEETCODE】14-Longest Common Prefix
查看>>
【LEETCODE】38-Count and Say
查看>>
【LEETCODE】278-First Bad Version
查看>>
【LEETCODE】303-Range Sum Query - Immutable
查看>>
【LEETCODE】21-Merge Two Sorted Lists
查看>>
【LEETCODE】231-Power of Two
查看>>
【LEETCODE】172-Factorial Trailing Zeroes
查看>>
【LEETCODE】112-Path Sum
查看>>
【LEETCODE】9-Palindrome Number
查看>>
【极客学院】-python学习笔记-Python快速入门(面向对象-引入外部文件-Web2Py创建网站)
查看>>
【LEETCODE】190-Reverse Bits
查看>>
【LEETCODE】67-Add Binary
查看>>