acgo题库
  • 首页
  • 题库
  • 题单
  • 竞赛
  • 讨论
  • 排行
  • 团队
  • 备赛专区

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
登录
注册
题目详情题解(0)讨论(0)提交记录(0)
  • 官方题解

    【算法分析】 牌数一定可以分到一样多,相邻两堆牌之间最多只移动纸牌一次(最优方案)。 每一次移动可以看成相邻两堆牌中左边一堆 aiaiai 向 右边一堆 ai+1ai+1ai+1 移动 x=a[i]−avgx = a[i] - avgx=a[i]−avg 张牌。 x>0,左往右移动一次; x<0,右往左移动一次; x==0,不移动 【参考代码】 【时间复杂度】 O(n)O(n)O(n) 【预计得分】 100pts100pts100pts

    userId_undefined

    AC君

    管理员
    倔强青铜
    138阅读
    0回复
    1点赞
  • 不会的看我!!!

    userId_undefined

    yy

    倔强青铜
    43阅读
    2回复
    0点赞
  • 小贪心

    userId_undefined

    !@#¥%……&*()

    倔强青铜
    14阅读
    0回复
    1点赞
  • 题解

    userId_undefined

    嘉陵江的晚风.

    倔强青铜
    14阅读
    0回复
    0点赞
  • Tj

    思维量橙,码量橙。 思路:算平均数,求出每一堆与平均数的差,然后遍历,有差右移并计数。正确性显然。

    userId_undefined

    暑 假 神(开学祭

    秩序白银
    12阅读
    0回复
    0点赞
  • 题解

    #include <bits/stdc++.h> #include <algorithm> using namespace std; int n,sum=0; int a[1000001]; int main(){ cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; sum+=a[i]; } sum/=n; for(int i=1;i<=n;i++) a[i]-=sum; int cnt=0; int i=0,j=n; while(a[i]==0 && i<n) i++; while(a[j]==0 and j>i) j--; while(i<j){ a[i+1]+=a[i]; a[i]=0; cnt++; i++; while(a[i]==0 and i<=j) i++; } cout<<cnt; return 0; }

    userId_undefined

    kali熊砸

    倔强青铜
    12阅读
    0回复
    0点赞
  • 题解

    userId_undefined

    158****6389

    倔强青铜
    11阅读
    0回复
    0点赞
  • 赞美海螺

    userId_undefined

    沃姆

    倔强青铜
    11阅读
    0回复
    0点赞
首页