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. SQL Server 数据库设计
  2. VTK:PolyData之DetermineArrayDataTypes
  3. c语言中字符串 x,使用c语言解析字符串176x144中的数字
  4. LeetCode 54. Spiral Matrix
  5. 对于 js 性能优化的启发,debounce 和 throttle。
  6. Atitit 前端 dom 的艺术 attilax著 目录 1. 概念 1 2. 发展历程 1 2.1. 厂商各自为政 2 2.2. 1.4 制定标准 标准化 w3cdom 2 2.3. 1.4.
  7. 啦啦外卖独立版41.7全开源小程序app全套源码带vue源码
  8. wordpress专属线报网主题模板
  9. 研发项目wbs分解简单案例_做项目WBS(工作分解结构)
  10. 没有人能拒绝这个网站,没有人!
  11. ABAP 语法备忘 刘欣
  12. python模块总结_Python常用模块资料总结和归纳
  13. CSS Sprites(CSS图片精灵、雪碧图)看这里就够了
  14. safari下载网络视频的方法
  15. 微信公众号服务号如何开通微信支付功能
  16. Ubuntu应用---安装WPS Office
  17. ASP php sem,Stephen的SEM博客
  18. 【高级篇 / SNMP】(7.0) ❀ 04. PRTG 监控 FortiGate 状态 (下) ❀ FortiGate 防火墙
  19. 物流怎么批量查询 教你一键批量查询全部物流信息
  20. 《初级会计电算化实用教程(金蝶ERP—K/3版)》一1.4 会计核算软件

热门文章

  1. Home Inventory for Mac(家庭资产管理软件)
  2. 从王者荣耀看设计模式(十.外观模式)
  3. 学习大数据,公司常用开发的编程语言是什么?
  4. 【ARMv8基础篇】DMC-400控制器简介
  5. 给钱给地给人!三运营商千亿砸手机渠道谁买账
  6. [渝粤教育] 广东-国家-开放大学 21秋期末考试大学英语210262k2 (2)
  7. 期末项目——同源药膳堂
  8. html页面打包为小程序
  9. 疫情影响下的物联网发展趋势
  10. 企业管理需要的启示:没有任何借口