首页 > 代码库 > [VijosP1639]机密文件 题解
[VijosP1639]机密文件 题解
题目大意:
m个人抄n份资料,资料有编号,每人抄连续的几份资料,每份资料页数不一定相等,每个人抄的速度相同,求使得总时间最少的方案(总时间相同,越前面的人抄的越少)
思路:
假设每人一天抄一页,二分天数,倒着安排资料即可。
代码:
1 #include<cstdio> 2 int n,m,l,r,i,p,a[1001],ans[1001]; 3 4 bool check(int x) 5 { 6 int i=n,t=0,cnt=0; 7 for (;i>=0;--i) 8 { 9 t=t+a[i]; 10 if (t>x) 11 { 12 t=0; ++i; 13 if (++cnt>m) return 0; 14 } 15 } 16 if (t) t=1; 17 return t+cnt<=m; 18 } 19 20 int main() 21 { 22 scanf("%d%d",&n,&m); 23 for (i=1;i<=n;i++) scanf("%d",&a[i]),r=r+a[i]; 24 for (l=0;l<r;) 25 { 26 int mid=l+r>>1; 27 if (check(mid)) r=mid; else l=mid+1; 28 } 29 r=0,p=m; 30 for (i=n;i;--i) 31 { 32 r=r+a[i]; 33 if (r>l) 34 { 35 r=0; 36 ans[p--]=++i; 37 } 38 } 39 printf("1 %d\n",ans[p+1]-1); 40 for (i=p+1;i<m;i++) printf("%d %d\n",ans[i],ans[i+1]-1); 41 printf("%d %d",ans[m],n); 42 return 0; 43 }
[VijosP1639]机密文件 题解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。