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
  • 相关阅读:
    树-1
    javaSE 2
    (蓝桥杯)蛇形矩阵的求法
    年轻母牛的故事
    互质环(序列)与最小公倍数的几种求法
    算法的复杂度
    Halo开源博客项目配置
    IDEA报错稀有语法问题
    带你跑ELADMIN后台管理系统开源项目
    相比c++,Java在基础语法的改变
  • 原文地址:https://www.cnblogs.com/williamchenwl/p/3699443.html
Copyright © 2011-2022 走看看