HDU4262 Juggler
http://acm.hdu.edu.cn/showproblem.php?pid=4262
题意:给你一串珠子,开始手握第一号珠子。有三种操作:顺时针转动一个珠子,逆时针转一个珠子,取下一个珠子(此珠子必须在手上)。现给定取下珠子所要求的顺序,求操作的最少步数。同时还有一条件,取下珠子后顺时针方向的下一个珠子会滑落到被取珠子的位置,串长度减一。
题解:由于取珠子顺序被规定,即每个状态最后结果都一样,故可以采用贪心,每次采用最小最近的方式将要取下的珠子转到手上。如同链表删节点,分别用数组保存每个节点的前一个和后一个节点。而该串则用树状数组保存,目标珠子与当前手中珠子距离sum(target)-sum(now)即可。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
//const double eps=1e-7;
//const double INF=1e50;
//const double pi=acos(-1);#define N 100005
#define M 10000int tp[N],n,c[N],next[N],pre[N];void add(int p,int d)//p位置上加d
{while(p<=n){c[p]+=d;p+=p&(-p);//lowbit[i]=i&(-i);}
}int sum(int p)//a[1]+...+a[p]
{int ret=0;while (p){ret+=c[p];p-=p&(-p);}return ret;
}void init()
{int i;for (i=1;i<=n;i++){add(i,1);next[i]=i+1;pre[i]=i-1;}next[n]=1;pre[1]=n;
}int main()
{freopen("a","r",stdin);int i,j;long long ans;while (1){scanf("%d",&n);if (n==0) break;for (i=1;i<=n;i++){scanf("%d",&j);tp[j]=i;}init();tp[0]=1;ans=0;for (i=1;i<=n;i++){int w1,w2;w1=abs(sum(tp[i])-sum(tp[i-1]));//tp[i-1]不再表示上次取下的珠子的编号w2=(n-i+1)-w1;if (w1<w2) ans+=w1+1;else ans+=w2+1;next[pre[tp[i]]]=next[tp[i]];pre[next[tp[i]]]=pre[tp[i]];add(tp[i],-1);tp[i]=next[tp[i]];//这里就用tp[i]保存第i个珠子被取走后手上拿的是几号珠子方便下次计算}cout<<ans<<endl;}return 0;
}
HDU4262 Juggler相关推荐
- HDU4262 Juggler 线段树
warm up的第六题,当时就看出来是线段树了,只是因为一些细节问题,没有A掉,做题目的时候心浮气躁.看来要走的路还很长. 这题目有三种动作让我们选择 1:顺时针移动一格 2:逆时针移动一格 3:把第 ...
- 【模拟+线段树】 hdu4262 Juggler
Juggler 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4262 题意:有个数字圆环.三种操作:逆时针转一个,顺时针转一个,丢掉手中的那个的同时顺时针 ...
- Starling Juggler
Juggler类允许我们控制所有实现了IAnimatable接口的对象的动画播放.MovieClip类实现 了该接口,你也可以自定义一个动画类在Starling中播放,你所要做的,仅仅是让你的自定 义 ...
- Starling 改变Juggler播放速度
我们在项目中需要实现快速或者慢速播放 原来的Starling并不支持[变频播放] 做了个简单的Juggler 来实现 废话不说 直接上代码 package xxxxx.core {import sta ...
- TOJ 4354 HDU 4262 Juggler / 树状数组
Juggler 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 描述 As part of my magical juggling act, I ...
- 免费虚拟现实运用开发平台VR Juggler
VR Juggler 是一个虚拟现实运用开发平台.它是由Iowa State 大学的虚拟现实应用开发中心研究的.它可以在简单的操作系统(如pc机)中运行复杂的多屏显示系统或者是高端工作站和超级服务器. ...
- JAVA:实现Juggler Sequence杂耍者序列算法(附完整源码)
JAVA:实现Juggler Sequence杂耍者序列算法 package com.thealgorithms.maths;import java.util.ArrayList; import ja ...
- HDU 4262 Juggler
http://acm.hdu.edu.cn/showproblem.php?pid=4262 树状数组更新点的位置,并可以求出两点之间的有多少球 View Code 1 #include <st ...
- HDU 4262 Juggler 树状数组
将每个球按输入顺序编号,建立 它第几个被扔掉->编号 的映射关系. 记录当前在手里的球的编号,按扔掉的顺序查找这个球的编号,看看这个球是逆时针转到手里更近还是顺时针转到手里更近,即当前扔掉球的编 ...
最新文章
- SQL Server 数据库设计
- VTK:PolyData之DetermineArrayDataTypes
- c语言中字符串 x,使用c语言解析字符串176x144中的数字
- LeetCode 54. Spiral Matrix
- 对于 js 性能优化的启发,debounce 和 throttle。
- Atitit 前端 dom 的艺术 attilax著 目录 1. 概念	1 2. 发展历程	1 2.1. 厂商各自为政	2 2.2. 1.4 制定标准 标准化 w3cdom	2 2.3. 1.4.
- 啦啦外卖独立版41.7全开源小程序app全套源码带vue源码
- wordpress专属线报网主题模板
- 研发项目wbs分解简单案例_做项目WBS(工作分解结构)
- 没有人能拒绝这个网站,没有人!
- ABAP 语法备忘 刘欣
- python模块总结_Python常用模块资料总结和归纳
- CSS Sprites(CSS图片精灵、雪碧图)看这里就够了
- safari下载网络视频的方法
- 微信公众号服务号如何开通微信支付功能
- Ubuntu应用---安装WPS Office
- ASP php sem,Stephen的SEM博客
- 【高级篇 / SNMP】(7.0) ❀ 04. PRTG 监控 FortiGate 状态 (下) ❀ FortiGate 防火墙
- 物流怎么批量查询 教你一键批量查询全部物流信息
- 《初级会计电算化实用教程(金蝶ERP—K/3版)》一1.4 会计核算软件