bzoj 1045 [HAOI2008] 糖果传递——设变量推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1045
费用流TLE。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const int N=1e6+;
const ll INF=1e15;
int n,a[N],hd[N],xnt=,pre[N],dis[N];
ll ans,base;
bool vis[N];
struct Ed{
int nxt,to,w;
ll cap;
Ed(int n=,int t=,ll c=,int w=):nxt(n),to(t),cap(c),w(w) {}
}ed[N<<];
int rdn()
{
int ret=;char ch=getchar();
while(ch>''||ch<'')ch=getchar();
while(ch>=''&&ch<='')(ret*=)+=ch-'',ch=getchar();
return ret;
}
void add(int x,int y,ll cap)
{
int k=;if(!x||y==n+)k=;
ed[++xnt]=Ed(hd[x],y,cap,k);hd[x]=xnt;
ed[++xnt]=Ed(hd[y],x,,-k);hd[y]=xnt;
}
queue<int> q;
bool spfa()
{
q.push();vis[]=;
memset(dis,0x3f,sizeof dis);dis[]=;
while(q.size())
{
int k=q.front();q.pop();vis[k]=;
for(int i=hd[k],v;i;i=ed[i].nxt)
if(ed[i].cap&&dis[v=ed[i].to]>dis[k]+ed[i].w)
{
dis[v]=dis[k]+ed[i].w;
pre[v]=i;
if(!vis[v])vis[v]=,q.push(v);
}
}
return dis[n+]<0x3f3f3f3f;
}
void ek()
{
ll flow=INF;
for(int i=n+;i;i=ed[pre[i]^].to)
flow=min(flow,ed[pre[i]].cap);
for(int i=n+;i;i=ed[pre[i]^].to)
ed[pre[i]].cap-=flow,ed[pre[i]^].cap+=flow;
ans+=flow*dis[n+];
}
int main()
{
n=rdn();
for(int i=;i<=n;i++)a[i]=rdn(),base+=a[i];
base/=n;
for(int i=;i<=n;i++)
{
if(a[i]>base)add(,i,a[i]-base);
if(a[i]<base)add(i,n+,base-a[i]);
add(i,i-?i-:n,INF);add(i,i+<=n?i+:,INF);
}
while(spfa())ek();
printf("%lld\n",ans);
return ;
}
为了计算出每个人传递出去的糖果数量,需要先把它们设出来。
不妨指定一个方向。
然后尽量把每个变量用常量表示出来。
希望自己以后也能想出来。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=1e6+;
int n;
ll a[N],base,c[N],ans;
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%lld",&a[i]),base+=a[i];
base/=n;
for(int i=;i<n;i++)c[i]=c[i-]+a[i]-base;
sort(c+,c+n);
ll x=c[(n+)>>];
for(int i=;i<n;i++)ans+=abs(x-c[i]);
printf("%lld\n",ans);
return ;
}
bzoj 1045 [HAOI2008] 糖果传递——设变量推式子的更多相关文章
- BZOJ 1045: [HAOI2008] 糖果传递 数学
1045: [HAOI2008] 糖果传递 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1045 Description 有n个小朋友坐 ...
- bzoj 1045: [HAOI2008] 糖果传递 贪心
1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1812 Solved: 846[Submit][Stat ...
- [BZOJ 1045] [HAOI2008] 糖果传递
题目链接:BZOJ 1045 Attention:数据范围中 n <= 10^5 ,实际数据范围比这要大,将数组开到 10^6 就没有问题了. 我们先来看一下下面的这个问题. 若 n 个人坐成一 ...
- bzoj 1045 [HAOI2008] 糖果传递 —— 贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1045 好像是贪心...但这是一个环... 看博客:http://hzwer.com/2656 ...
- BZOJ 1045 [HAOI2008]糖果传递 ★(环形等分:中位数)
题意 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 思路 假设平均数是x,且a1给an了k个(k<0说明是an给a1了-k个),那么总代价就 ...
- bzoj 1045: [HAOI2008] 糖果传递【瞎搞】
感觉我的智商可能不够写题解,就直接截了hzwer的blog 地址http://hzwer.com/2656.html #include<iostream> #include<cstd ...
- 【BZOJ 1045】 1045: [HAOI2008] 糖果传递
1045: [HAOI2008] 糖果传递 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n& ...
- 1045: [HAOI2008] 糖果传递 - BZOJ
Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1.Input 小朋友个数n 下面n行 aiOutput 求使所有人获得均等糖果的 ...
- 【BZOJ】1045: [HAOI2008]糖果传递(中位数)
http://www.lydsy.com/JudgeOnline/problem.php?id=1045 白书上有讲 没ac的坑点在,数据范围n<=1,000,000 #include < ...
随机推荐
- Python学习day41-数据库(1)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- TensorFlow实战Google深度学习框架-人工智能教程-自学人工智能的第二天-深度学习
自学人工智能的第一天 "TensorFlow 是谷歌 2015 年开源的主流深度学习框架,目前已得到广泛应用.本书为 TensorFlow 入门参考书,旨在帮助读者以快速.有效的方式上手 T ...
- ListCtrl使用指南
http://blog.csdn.net/bqw2008/article/details/2047489 Windows ListCtrl使用技巧1. ListCtrl 风格 LVS_IC ...
- MFC安装与部署(程序打包)
(发现csdn传照片实在是太麻烦, 不能够直接拖拽进来;所以我直接使用云笔记生成一张图片 直接完成!) (懒癌晚期-)
- CodeChef:Chef and Problems(分块)
CodeChef:Chef and Problems 题目大意 有一个长度为n的序列$a_1,a_2,……,a_n$,每次给出一个区间[l,r],求在区间内两个相等的数的最远距离($max(j-i,满 ...
- Odoo(OpenERP)配置文件详解
[options] ; addons模块的查找路径 addons_path = E:\GreenOdoo8.0\source\openerp\addons ; 管理员主控密码(用于创建.还原和备份数据 ...
- java虚拟机(十三)--GC调优思路
GC调优对我们开发人员来说,如果你想要技术方面一直发展下去,这部分内容的了解是必不可少的,jvm对于工作.面试来说都很重要,GC调优的问题 更是重中之重,因为是对你jvm学习内容的实践,知识只有应用实 ...
- day 71作业
作业: url配置 urlpatterns = [ url(r'^v2/cars/$',views.CarAPIView.as_view()), url(r'^v2/cars/(?P<pk> ...
- get请求中文乱码
get请求时要将url进行encodeURI http://www.ruanyifeng.com/blog/2010/02/url_encoding.html http://www.ruanyifen ...
- 166 链表倒数第n个结点
原题网址:https://www.lintcode.com/problem/nth-to-last-node-in-list/description 描述 找到单链表倒数第n个节点,保证链表中节点的最 ...