HDU 5303 多校第二场
来源:互联网 发布:广电网络是上市公司吗 编辑:程序博客网 时间:2024/05/23 15:50
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5303
题目大意:有一个长为L的环,n个苹果树,一个篮子最多装k个苹果,装完要回到起点卸下再出发,给出n个苹果树顺时针的位置及苹果的个数,求摘完所有苹果走的最小路程。
思路:总体是贪心,把环变成直线,分左右两条线,还有一种情况就是最后剩下小于k个的苹果绕环一圈拿完,对于每条线,
可以dp求得距离,有一个窍门,因为总的苹果数是小于1e5的,所以可以对于每个苹果都看成一个点。dis[i]表示取完第i个苹果所走的距离,有i<=k时,dis[i]=x[i];i>k时,dis[i]=dis[i-k]+x[i];...
#include <iostream>#include <string.h>#include <algorithm>#include <vector>#include <cstdio>using namespace std;#define REP(i,a,b) for(int i=a;i<b;++i)#define mset(a,b) memset(a,b,sizeof a)typedef long long LL;const int maxn = 101111;LL x[maxn];vector <LL> l,r;LL ldis[maxn],rdis[maxn];int a,n,L,k;void init(){ l.clear(); r.clear(); mset(ldis,0); mset(rdis,0);}int main(){ int t; scanf("%d",&t); while(t--) { init(); //cin>>L>>n>>k; scanf("%I64d%d%d",&L,&n,&k); int cnt=0; REP(i,0,n){ LL pos; //cin>>pos>>a; scanf("%d%d",&pos,&a); REP(i,0,a){ x[cnt++]=pos; } } //sort(x,x+cnt); REP(i,0,cnt){ if(x[i]*2<=L) l.push_back(x[i]); else{ r.push_back(L-x[i]); } } sort(l.begin(),l.end()); sort(r.begin(),r.end()); int lsz=l.size(); int rsz=r.size(); for(int i=0;i<lsz;++i){ int j=i+1; if(j<=k) ldis[j]=l[i]; else{ ldis[j]=ldis[j-k]+l[i]; } } for(int i=0;i<rsz;++i){ int j=i+1; if(j<=k) rdis[j]=r[i]; else{ rdis[j]=rdis[j-k]+r[i]; } } LL ans=((ldis[lsz]+rdis[rsz])<<1); for(int i=1;i<=lsz && i<k;++i){ int rpo = max(0,rsz-k+i); LL dis = ((ldis[lsz-i]+rdis[rpo])<<1)+L; ans=min(ans,dis); } printf("%I64d\n",ans); }}
0 0
- HDU 5303 多校第二场
- hdu 4617 Weapon 多校第二场
- hdu 4616 Game 多校第二场
- hdu 4620 多校第二场 搜索
- 多校第二场
- 多校第二场
- HDU/杭电2013多校第二场解题报告
- hdu 4614 多校联赛第二场 1004题
- 2013 多校第二场 hdu 4619 Warm up 2
- 2013 多校第二场 hdu 4618 Palindrome Sub-Array
- hdu 4611 Balls Rearrangement 多校第二场
- hdu 4618 Palindrome Sub-Array 多校第二场
- 2013 多校第二场 hdu 4611 Balls Rearrangement
- hdu 4614 Vases and Flowers 多校第二场
- hdu 4619 Warm up 2 多校第二场
- 2013 多校第二场 hdu 4616 Game
- 2013 多校第二场 hdu 4612 Warm up
- 2013 多校第二场 hdu 4617 Weapon
- (LeetCode)反转整数
- 树莓派使用无线网卡上网相关命令
- charAt() equals() replaceAll() Character Scanner() indexOf()
- Linux启动新进程的几种方法及比较
- LeetCode之Scramble String
- HDU 5303 多校第二场
- Android高仿QQ v4.7.0全新UI
- POJ 3278:Catch That Cow
- Office2016,mac破解版
- 【BZOJ】2243 染色
- Linux环境下的计算器
- Loader之AsyncTaskLoader(联系人短信)
- hdu 3172 Virtual Friends(map)
- C++中的类型擦除(type erasure in c++)