topcoder ArrayTransformations
来源:互联网 发布:淘宝美工助理广州 编辑:程序博客网 时间:2024/05/29 00:32
首先考虑模型,从
接下来考虑具体要求,可以二分答案然后对边加上下界。
#include<cstring>#include<vector>#include<string>#include<sstream>#include<algorithm>using namespace std;const int maxn=310,p=300,maxm=400010,s=285,s1=286,t=287,S=288,T=289,oo=0x3f3f3f3f;class ArrayTransformations{ int fir[maxn],ne[maxm],to[maxm],w[maxm],c[maxm], que[maxn],dep[maxn],dis[maxn],mnw[maxn],pre[maxn],inq[maxn], a[maxn],n,k,m,num;private: void prt() { for (int i=0;i<=T;i++) for (int j=fir[i];j;j=ne[j]) if (w[j]) printf("%d->%d:%d,%d\n",i,to[j],w[j],c[j]); } void inc(int &x) { x=x+1==p?0:x+1; } void add(int u,int v,int x,int y) { num++; ne[num*2]=fir[u]; fir[u]=num*2; to[num*2]=v; w[num*2]=x; c[num*2]=y; ne[num*2+1]=fir[v]; fir[v]=num*2+1; to[num*2+1]=u; w[num*2+1]=0; c[num*2+1]=-y; } int find(int &x) { int hd=0,tl=1,u,v; memset(mnw,0,sizeof(mnw)); mnw[S]=oo; memset(dis,0x3f,sizeof(dis)); dis[S]=0; que[0]=S; inq[S]=1; while (hd!=tl) { u=que[hd]; inc(hd); for (int i=fir[u];i;i=ne[i]) if (w[i]&&dis[u]+c[i]<dis[v=to[i]]) { dis[v]=dis[u]+c[i]; mnw[v]=min(mnw[u],w[i]); pre[v]=i; if (!inq[v]) { que[tl]=v; inc(tl); inq[v]=1; } } inq[u]=0; } if (!mnw[T]) return 0; for (int i=pre[T];i;i=pre[to[i^1]]) { w[i]-=mnw[T]; w[i^1]+=mnw[T]; } x=mnw[T]*dis[T]; return 1; } int check(int x) { int ans=0; memset(fir,0,sizeof(fir)); num=0; add(s,s1,k,0); add(t,s,oo,0); for (int i=0;i<n;i++) add(s1,i,oo,0); for (int i=1;i<=n;i++) add(i,t,oo,0); for (int i=1;i<=n;i++) { add(i-1,i,oo,1); if (a[i]>x) { add(i-1,T,a[i]-x,0); add(S,i,a[i]-x,0); ans+=a[i]-x; } } //if (x==5||x==6) prt(); while (find(x)) ans+=x; return ans<=m; }public: int minimalValue(vector<string> initialArray,int K,int M) { stringstream st; int x,l,r,mid; k=K; m=M; for (vector<string>::iterator it=initialArray.begin();it!=initialArray.end();++it) { st.clear(); st.str(*it); while (st>>x) a[++n]=x; } r=0; for (int i=1;i<=n;++i) r=max(r,a[i]); l=max(0,r-k); while (l<r) { mid=(l+r)/2; if (check(mid)) r=mid; else l=mid+1; } return l; }};
0 0
- topcoder ArrayTransformations
- TopCoder
- topcoder
- Topcoder
- topcoder
- topcoder
- Topcoder
- TOPCODER交流
- topcoder 小结
- TopCoder介绍
- topcoder是什么?
- TopCoder教程
- TopCoder简介
- TopCoder入门教程
- topcoder入门
- topcoder配置
- TopCoder入门教程
- [Topcoder] SRM474
- gRPC vs Thrift
- 响铃:飘扬在德国的海尔旗帜是中国制造的世纪跨越
- 阿里云服务器使用教程
- 项目成功和失败的几大因素
- POJ 2253 Frogger (单源最短路变型 求路径上最大边权值的最小值)
- topcoder ArrayTransformations
- jquery 获取不到checkbox checked时
- C++实验5-数组分离
- Tensorflow r0.11的tf.gfile.Glob()错误
- 热门加壳工具VMProtect v3.1发布,新增内存保护,性能改进|附下载
- 获取GridView行的主键值
- 斗地主AI算法——第四章の权值定义
- Periodic String,UVa455(周期串)
- 不用FTP使用SecureCRT上传下载文件,并解决rz、sz command not found异常