HDU 5935 Car【贪心,枚举,精度】
Problem Description
Ruins is driving a car to participating in a programming contest. As on a very tight schedule, he will drive the car without any slow down, so the speed of the car is non-decrease real number.
Of course, his speeding caught the attention of the traffic police. Police record N positions of Ruins without time mark, the only thing they know is every position is recorded at an integer time point and Ruins started at 0.
Now they want to know the minimum time that Ruins used to pass the last position.
Input
First line contains an integer T, which indicates the number of test cases.
Every test case begins with an integers N, which is the number of the recorded positions.
The second line contains N numbers a1, a2, ⋯, aN, indicating the recorded positions.
Limits
1≤T≤100
1≤N≤105
0< ai≤109
ai< ai+1
Output
For every test case, you should output ‘Case #x: y’, where x indicates the case number and counts from 1 and y is the minimum time.
Sample Input
1
3
6 11 21
Sample Output
Case #1: 4
【题意】:给一些距离点,要求速度(real number)非递减,求从0开始到最后一点的最少时间。eg:(6)6(5)11(10)21 , 要时间最少,最后一段为1s,中段5/5=1,最前为6/3=2(因为保持速度非递减)。1+1+2=4。
【分析】:贪心。从后往前推,因为没有给出对速度的限制,最后一段时间最小必定为1s,通过已经预设的1s可以求得最后一段的速度。又要保持速度非递减,可以枚举时间1s,2s,3s···,直到速度小于等于后一段的就可以。时间是个整数,但是速度不一定是个整数。于是精度问题要格外小心。
【代码】:
#include<string.h>
#include<cstdio>
#include<iostream>
#define maxn 100005
int main()
{
int t;
int n,sum;
int a[maxn];
scanf("%d",&t);
for(int cas=;cas<=t;cas++)
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
double v=(a[n]-a[n-]);
sum=;
for(int i=n-;i>=;i--)
{
for(int j=(a[i]-a[i-])/v; ;j++)
{
double y=(a[i]-a[i-])*1.0/j;
if(y<=v)
{
sum+=j;
v=y;
break;
}
}
}
printf("Case #%d: %d\n",cas,sum);
}
return ;
}
贪心,逆向
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define eps 1e-8
int s[];
int main()
{
int t,n,x,ans,tt=;
double v;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
ans=;
for(int i=;i<=n;i++)
scanf("%d",&s[i]);
v=s[n]-s[n-];
for(int i=n-;i;i--)
{
x=s[i]-s[i-];
if(x<=v+eps)
{
ans++;
v=x;
}
else
{
ans+=(int(double(x-eps)/v)+);
v=double(x)/(int(double(x-eps)/v)+);
}
}
printf("Case #%d: %d\n",tt++,ans);
}
return ;
}
别人家的
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
const int maxn = 1e5+;
int a[maxn], t, n, ca = ; int main(void)
{
cin >> t;
while(t--)
{
scanf("%d", &n);
for(int i = ; i <= n; i++)
scanf("%d", &a[i]);
ll ans = ;
double spe = a[n]-a[n-];
for(int i = n; i > ; i--)
{
double len = (a[i]-a[i-])*1.0;
int t = len/spe;
ans += t;
if(len/t != spe)
{
ans++;
spe = len/(t+);
}
}
printf("Case #%d: %d\n", ca++, ans);
}
return ;
}
别人家的*2
*********************************************别人的想法:http://blog.csdn.net/queuelovestack/article/details/52984042
由于车速是非递减的,那么从第N-1个位置到第N个位置最优的用时为1
对于相邻的两段,我们有
稍微做个转化,可得
即相同时间间隔内,后者所驶过的路程要大于等于前者
已知最后一段行驶时间间隔为1,行驶路程为a[n]-a[n-1]
倒数第二段行驶路程为a[n-1]-a[n-2]
则倒数第二段的行驶时间间隔为
得到倒数第二项之后可以由倒数第二项推出倒数第三项
反向遍历一遍即可
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<list>
#include<bitset>
#include<cmath>
#include<complex>
#include<string>
#include<algorithm>
#include<iostream>
#define eps 1e-9
#define LL long long
#define PI acos(-1.0)
#define bitnum(a) __builtin_popcount(a)
using namespace std;
const int N = ;
const int M = ;
const int inf = ;
const int mod = ;
int s[N];
int main()
{
int t,n,i,j,p=;
__int64 ans,a,b,c;
scanf("%d",&t);
while(t--)
{
ans=;
scanf("%d",&n);
for(i=;i<=n;i++)
scanf("%d",&s[i]);
a=s[n]-s[n-];b=;
for(i=n;i>=;i--)
{
c=s[i]-s[i-];
b=(b*c+a-)/a;
a=c;
ans+=b;
}
printf("Case #%d: %I64d\n",p++,ans);
}
return ;
}
别人家的*3
HDU 5935 Car【贪心,枚举,精度】的更多相关文章
- Hdu 4864(Task 贪心)(Java实现)
Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...
- POJ 1018 Communication System 贪心+枚举
看题传送门:http://poj.org/problem?id=1018 题目大意: 某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m个厂家提供生产,而每个厂家生产的同种设备都 ...
- D - 淡黄的长裙 HDU - 4221(贪心)
D - 淡黄的长裙 HDU - 4221(贪心) James is almost mad! Currently, he was assigned a lot of works to do, so ma ...
- HDU 5303 Delicious Apples (贪心 枚举 好题)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- hdu 4091 Zombie’s Treasure Chest 贪心+枚举
转自:http://blog.csdn.net/a601025382s/article/details/12308193 题意: 输入背包体积n,绿宝石体积s1,价值v1,蓝宝石体积s2,价值v2,宝 ...
- Delicious Apples (hdu 5303 贪心+枚举)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- HDU 5303 Delicious Apples (2015多校第二场 贪心 + 枚举)
Delicious Apples Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Other ...
- HDU 5353—— Average——————【贪心+枚举】
Average Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total S ...
- HDU 4803 Poor Warehouse Keeper (贪心+避开精度)
555555,能避开精度还是避开精度吧,,,,我们是弱菜.. Poor Warehouse Keeper Time Limit: 2000/1000 MS (Java/Others) Memor ...
随机推荐
- 【bzoj1922】[Sdoi2010]大陆争霸 堆优化Dijkstra
题目描述 一张n个点m条边的图,通过每条边需要一定的时间.有一些限制条件,每个限制条件形如“x保护y”,表示到达y的最短时间不能小于到达x的最短时间(即如果在其之前到达,则需要等待至xd到达).问1到 ...
- BZOJ4415 SHOI2013发牌(线段树)
似乎是noip2017d2t3的一个部分分.用splay的话当然非常裸,但说不定会被卡常.可以发现序列中数的(环上)相对位置是不变的,考虑造一棵权值线段树维护权值区间内还有多少个数留在序列中,每次在线 ...
- Java Integer比较
今天看微信做了一个选择题,对Integer比较结果有点意外,题目如下: public static void main(String[] args) { Integer a = 1; Integer ...
- 【BZOJ 4556】[Tjoi2016&Heoi2016]字符串 SAM+二分+主席树
这道题市面上就两种法:一种是SA+二分+主席树,一种是SAM+二分+主席树(有不少人打线段树合并???)(除此之外还有一种利用炒鸡水的数据的暴力SA,贼快.....)(当时学SA的时候没做这道题,现在 ...
- 从零开始学习MXnet(一)
最近工作要开始用到MXnet,然而MXnet的文档写的实在是.....所以在这记录点东西,方便自己,也方便大家. 我觉得搞清楚一个框架怎么使用,第一步就是用它来训练自己的数据,这是个很关键的一步. 一 ...
- POJ1637:Sightseeing tour(混合图的欧拉回路)
Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10581 Accepted: 4466 ...
- rman备份与异机恢复
一.rman备份脚本并为定时任务 #!/bin/bashsource ~/.bash_profileexport LANG=en_USBACKUP_DATE=`date +%d`#RMAN_LOG_F ...
- Java之戳中痛点 - (4)i++ 和 ++i 探究原理
先看一个例子: package com.test; public class AutoIncrement { public static void main(String[] args) { int ...
- [HTML]去除li前面的小黑点,和ul、LI部分属性[转]
转摘自:http://blog.csdn.net/cqkxzyi/article/details/7606181 对于很多人用div来做网站时,总会用到,但在显示效果时前面总是会有一个小黑点,这个令很 ...
- itext转html为pdf遇到的问题
记录一下使用itext将html文件转为pdf文件遇到的一些问题 1.中文不显示 原因:itext默认不支持中文 解决方法:引入中文字体 需要注意的是在java代码中设置好中文字体后,还需要在html ...