HDU5303
题意:给定一个环形道路长度为L,以及环形道路下标为0处为起始点,在环形道路上距离起始点Xi位置种植一颗苹果树,该树有a个苹果,篮子的最大容量为K,那么求摘完全部苹果所需的最短距离。
思路:之前没想出来,根据官方题解,大致就是分成两个阶段来求,首先,按照普通情况下,肯定是每次都取离自己最短的苹果,这样因为要避免绕过半圈后的多余路径,就是分成两个半圈来走,分别贪心左右半圈,然后可能存在最后剩下的苹果数不足K,但如果走整圈的话一定优于分别半圈来回,为什么不足K呢,因为如果超过K的话,那么总可以算进左右半圈里面,所以这是最后的特殊情况,那么最后只要取这两个值中的最小值即可,在求整圈的时候,注意右边判断的时候可能为负值情况。
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- #define MAX 100050
- long long sum_len_left[MAX];
- long long sum_len_right[MAX];
- int sum_apple_left[MAX],sum_apple_right[MAX];
- long long ans;
- int Left,Right;
- int n,k,l,T,x_len,a_apple;
- void solve()
- {
- for(int i=1; i<=Left; i++)
- {
- if(i<=k)
- sum_len_left[i]=sum_apple_left[i];
- else
- sum_len_left[i]=sum_len_left[i-k]+sum_apple_left[i];
- }
- for(int i=1; i<=Right; i++)
- {
- if(i<=k)
- sum_len_right[i]=sum_apple_right[i];
- else
- sum_len_right[i]=sum_len_right[i-k]+sum_apple_right[i];
- }
- ans=(sum_len_left[Left]+sum_len_right[Right])*2;
- }
- int main()
- {
- scanf("%d",&T);
- while(T--)
- {
- memset(sum_len_left,0,sizeof(sum_len_left));
- memset(sum_len_right,0,sizeof(sum_len_right));
- scanf("%d%d%d",&l,&n,&k);
- Left=0,Right=0;
- for(int i=0; i<n; i++)
- {
- scanf("%d%d",&x_len,&a_apple);
- for(int j=0; j<a_apple; j++)
- {
- if(x_len*2<l)
- sum_apple_left[++Left]=x_len;
- else
- sum_apple_right[++Right]=l-x_len;
- }
- }
- sort(sum_apple_left+1,sum_apple_left+Left+1);
- sort(sum_apple_right+1,sum_apple_right+Right+1);
- solve();
- for(int i=0; i<=k; i++)
- {
- long long lll = (sum_len_left[Left-i]+sum_len_right[max(0,Right-(k-i))])*2;
- ans=min(ans,l+lll);
- }
- printf("%lld\n",ans);
- }
- return 0;
- }
HDU5303的更多相关文章
- [2015hdu多校联赛补题]hdu5303 Delicious Apples
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5303 题意:在一个长为L的环形路径上种着一些苹果树,告诉你苹果树的位置(题目中以0~L指示坐标)及苹果 ...
- Hdu5303 Delicious Apples 贪心
题目链接: HDU5303 题意: 有一条环形的长为L的路,仓库在位置0处, 这条路上有n棵苹果树,给出每棵苹果树的位置和苹果数量, 问用 一次最多能装K个苹果的篮子 把这条路上全部苹果採回仓库最 ...
- 解题报告 之 HDU5303 Delicious Apples
解题报告 之 HDU5303 Delicious Apples Description There are n apple trees planted along a cyclic road, whi ...
- 2015 多校联赛 ——HDU5303(贪心)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- hdu5303(2015多校2)--Delicious Apples(贪心+枚举)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- hdu5303贪心
http://acm.hdu.edu.cn/showproblem.php?pid=5303 说一下题目大意.. 有一个长为L的环..你家在原点位置0,那么剩下L-1个点上种有一些树, 给你树的位置和 ...
随机推荐
- 练习2 A - ASCII码排序
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 输入三 ...
- Asp.Net Mvc - 在OnResultExecut* 拦截Action返回的HTML
在Asp.Net MVC项目中通过重写ActionFilterAttribute中的方法,我们就可以在轻松的在Action方法执行前后做一些特殊的操作如:[身份认证.日志记录.内容截取等]. 但是我们 ...
- linux主要目录的作用
手动敲一遍.算是加强记忆吧~ /:文件系统的入口,也是最高一级的目录 /bin:最基本的且着急用户和普通用户都可以使用的命令放在此目录下,如:ls.cp等 /boot:存放Linux的内核及引导系统所 ...
- hdu 5135 Little Zu Chongzhi's Triangles
http://acm.hdu.edu.cn/showproblem.php?pid=5135 题意:给你N个木棍的长度,然后让你组成三角形,问你组成的三角形的和最大是多少? 思路:先求出可以组成的所有 ...
- 延长FLASH和EEPROM芯片写入次数的小方法
开发电子产品时,常常需要断电后保存某些数据,这就需要使用 FLASH或EEPROM芯片,这两种芯片,可擦除的次数是有限制的,通常FLASH为10万次,EEPROM要多一点,为100万甚至1000万次. ...
- Dll方式的线程,需要引用这个
{== D6DLLSynchronizer =================================================} {: This unit handles the D6 ...
- Context Switch Definition
A context switch (also sometimes referred to as a process switch or a task switch) is the switching ...
- traits编程技法
看了<stl源码剖析>中关于traits的部分,由于对模板还不是很熟悉,就看了一下还未完工的C++ Template 进阶指南 ,感觉收获很大,推荐一下. 在使用迭代器时,为了知道它的相应 ...
- [Locked] Inorder Successor in BST
Inorder Successor in BST Given a binary search tree and a node in it, find the in-order successor of ...
- [Sequence Alignment Methods] Smith–Waterman algorithm
Smith–Waterman algorithm 首先需要澄清一个事实,Smith–Waterman algorithm是求两个序列的最佳subsequence匹配,与之对应的算法但是求两个序列整体匹 ...