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相关推荐

  1. HDU4262 Juggler 线段树

    warm up的第六题,当时就看出来是线段树了,只是因为一些细节问题,没有A掉,做题目的时候心浮气躁.看来要走的路还很长. 这题目有三种动作让我们选择 1:顺时针移动一格 2:逆时针移动一格 3:把第 ...

  2. 【模拟+线段树】 hdu4262 Juggler

    Juggler 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4262 题意:有个数字圆环.三种操作:逆时针转一个,顺时针转一个,丢掉手中的那个的同时顺时针 ...

  3. Starling Juggler

    Juggler类允许我们控制所有实现了IAnimatable接口的对象的动画播放.MovieClip类实现 了该接口,你也可以自定义一个动画类在Starling中播放,你所要做的,仅仅是让你的自定 义 ...

  4. Starling 改变Juggler播放速度

    我们在项目中需要实现快速或者慢速播放 原来的Starling并不支持[变频播放] 做了个简单的Juggler 来实现 废话不说 直接上代码 package xxxxx.core {import sta ...

  5. TOJ 4354 HDU 4262 Juggler / 树状数组

    Juggler 时间限制(普通/Java):1000MS/3000MS     运行内存限制:65536KByte   描述 As part of my magical juggling act, I ...

  6. 免费虚拟现实运用开发平台VR Juggler

    VR Juggler 是一个虚拟现实运用开发平台.它是由Iowa State 大学的虚拟现实应用开发中心研究的.它可以在简单的操作系统(如pc机)中运行复杂的多屏显示系统或者是高端工作站和超级服务器. ...

  7. JAVA:实现Juggler Sequence杂耍者序列算法(附完整源码)

    JAVA:实现Juggler Sequence杂耍者序列算法 package com.thealgorithms.maths;import java.util.ArrayList; import ja ...

  8. HDU 4262 Juggler

    http://acm.hdu.edu.cn/showproblem.php?pid=4262 树状数组更新点的位置,并可以求出两点之间的有多少球 View Code 1 #include <st ...

  9. HDU 4262 Juggler 树状数组

    将每个球按输入顺序编号,建立 它第几个被扔掉->编号 的映射关系. 记录当前在手里的球的编号,按扔掉的顺序查找这个球的编号,看看这个球是逆时针转到手里更近还是顺时针转到手里更近,即当前扔掉球的编 ...

最新文章

  1. 云端卫士架构师讲DDoS攻击的智能防御之道
  2. 从理论到实践: ORB-SLAM3 Initializer完全解读
  3. FPGA的LVDS电平以及LVDS25电平能在HR Bank上使用吗?
  4. 201521123029《Java程序设计》第1周学习总结
  5. Swift—初始 (1)
  6. opencv python考勤_Python基于Opencv来快速实现人脸识别过程详解(完整版)
  7. Neville 插值方法
  8. JavaScript 表格专题
  9. JavaScript变异与非变异数组方法
  10. 年薪 700 万也换不来区块链开发者的一次回眸
  11. OpenGL: 渲染管线理论
  12. 超轻量级三级展开列表
  13. 如何构建有效的大数据战略
  14. python竞赛内存_python的内存机制
  15. 三菱plc 毕设_三菱plc编程上传/下载程序步骤
  16. 2021-05-20
  17. 计算机dns服务器错误或不存在,找不到服务器或 DNS 错误,详细教您找不到服务器或dns错误怎么解决...
  18. Leetcode 1146
  19. 怎样学好高一数学,首先掌握这4种方法
  20. Mac 系统mysql密码重置

热门文章

  1. 深度 | 详解可视化利器t-SNE算法:数无形时少直觉
  2. 【ICDAR 2023 X 阿里安全】挑战赛正式启动!篡改文本分类和检测两大赛题!
  3. 商城口碑颜值双高蓝牙耳机推荐,双11蓝牙耳机选购品牌排行榜
  4. 大数据平台开发需要掌握什么语言
  5. 报名成功冲向高级软件工程师之路开始了
  6. 关于安卓版微信群发软件如何设置微信自动更新!
  7. 浏览器自动旋转图片问题的解决方式
  8. 费希尔控制器知识讲解
  9. 【AltiumDesigner专栏】01.06——ECAD-MCAD(二)
  10. 苹果网站导航网站推荐(www.mac110.com)