zoukankan      html  css  js  c++  java
  • BZOJ P3293&&P1045

    其实后面一道题很早就做了,发现P3293和P1045一样,把之前AC的交上去居然没过....

    不过这题以前是看题解的,所以干脆重做了一遍

    和均分纸牌很相似,所以先同样,只要减去平均数,考虑向前一个位置移X,最后全部是零就可以了

    只考虑每个位置向前一个位置移牌的数量Xi,要求sigma(abs(xi))最小

    设第一个位置向最后一个位置移牌X1,那么剩下的都可以依次推出

    x1=x1,x2=x1-a[1],x3=x1-a[1]-a[2],x4=x1-a[1]-a[2]-a[3]....

    显然是一个中位数贪心。

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <cstdlib>
    #include <cmath>
    using namespace std;
    const int N=500000;
    int n,a[N];     
    int main()
      {  scanf("%d",&n); long long sum=0;  
         for (int i=0;i<n;i++) 
         scanf("%d",&a[i]),sum+=a[i]; sum=sum/n;  
         for (int i=1;i<n;i++) a[i]=sum-a[i],a[i]+=a[i-1];
         sort(a,a+n); long long ans=0,mid=a[n>>1];  
         for (int i=0;i<n;i++) 
         ans=ans+abs(a[i]-mid); 
         if (n==1) printf("0
    ");
         else    printf("%lld
    ",ans);     
         return 0;    
         } 
    View Code
  • 相关阅读:
    装饰器函数
    二分查找
    jmter 二次开发 IDEA 项目5.1
    python 测试框架nose
    pycharm 参数、快捷键、调试模式
    IDea 工具debug模式详细使用说明
    MySQL zip安装
    adb 设备命令
    兰亭集序 王羲之
    adb 命令实用
  • 原文地址:https://www.cnblogs.com/williamchenwl/p/3699443.html
Copyright © 2011-2022 走看看