HDU
来源:互联网 发布:mac电脑如何制作铃声 编辑:程序博客网 时间:2024/05/02 01:42
传送门:HDU 5037
题意:有一条小河长为M的小河,小河里存在N个石头,有一个每次能跳L米的小青蛙,随意添加石头保证青蛙能从头跳到尾的前提下,问青蛙使用最优策略跳到对岸最多需要多少次。
思路:我们要使青蛙跳的次数最多,那么必然要每L + 1的距离尽量使得青蛙跳两次,因此若连续一个或多个L + 1的距离没有石头,那么我们就可以让青蛙每L + 1跳两次,若有原有的石头,我们加石头时就要保证每两个不相邻的石头之间要大于等于l + 1,实现过程中我们就记录一下前一次跳的距离pre,如果这一次的余数x + pre <= L 那么x就会被青蛙合并到本次的最后一步中,即
pre = pre + x, 若x + pre > L, 那么就无法合并成一步了,则 pre = x.
代码:
#include<bits/stdc++.h>#define ll long long#define inf 0x3f3f3f3fusing namespace std;typedef pair<int,int> P;const int MAXN = 200010;int val[MAXN];int main(){int T, n, m ,l;cin >> T;int kase = 1;while(T--){scanf("%d %d %d", &n, &m, &l);for(int i = 1; i <= n; i++)scanf("%d", val + i);sort(val + 1, val + n + 1); val[++n] = m;int x, y, pre = l, ans = 0;for(int i = 1; i <= n; i++){x = (val[i] - val[i - 1]) % (l + 1);y = (val[i] - val[i - 1]) / (l + 1);if(pre + x > l)ans += 2 * y + 1, pre = x;elseans += 2 * y, pre += x; }printf("Case #%d: %d\n", kase++, ans);} return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- 手撸一个简单的单链表
- apk反编译---smali语法
- AspectJ切面编程获取不到原始类型
- win7 系统下安装Tex Live过程,使用ISO镜像,不用区份32位系统或者64位系统
- 导航栏(nav)
- HDU
- Kubernetes之蓝绿部署
- Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建
- java网络编程--TCP程序设计
- ffmpeg在windows下使用MinGW+msys+VS2015编译(x86或64版本,链接x264库,VS2015中可debug调试)
- 机器学习第十二章
- 基于Qt的图表库
- 计算机科学与技术
- C++运算符重载