2292 图灵机游戏

2292 图灵机游戏

时间限制: 1 s

空间限制: 64000 KB

题目等级 : 黄金 Gold

题目描述 Description

【Shadow 1】第二题

Shadow最近知道了图灵机是什么(Shadow:就是一行格子和一个机器头移来移去的呗!),于是他突发奇想,创造了一个新游戏——“图灵机游戏”(Shadow:好听吧?)。

游戏规则如下:

在一条长长的纸上有N个格子,每个格子上都有一个数,第i格的数记为Ai,机器头刚开始在第1格。这个游戏有两个操作:

1.如果现在在第i格,则可以移动机器头到第Ai格;

2.把某个Ai减少或增加1。

然而,fotile96看了之后却不以为然。“嗯,你挑战一下用最少次数使机器头到达第N格吧,这样好玩些……”

现在,Shadow已经快Crazy了。于是,Shadow把脸转向了你……

输入描述 Input Description

第1行,1个整数N;

第2行,N个整数Ai。

输出描述 Output Description

1行,1个整数,为最少的操作次数。

样例输入 Sample Input

5

3 4 2 5 3

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

对于30%的数据,1≤N≤10;
对于60%的数据,1≤N≤1000;
对于100%的数据,1≤N≤100000,1≤Ai≤N。

<h4>样例解释</h4>

1.先将第1格的值加1

2.跳到第4格

3.跳到第5格,结束游戏

ac:

 1 #include<iostream>
 2
 3 #include<cstdio>
 4
 5 using namespace std;
 6
 7 int a[100001],n,v[100001]= {0},ans[100001],q[100001];
 8
 9 void bfs()
10
11 {
12
13     q[1]=a[1];
14
15     v[a[1]]=1;
16
17     ans[a[1]]=1;
18
19     int head=1,tail=1;
20
21     while(head<=tail)
22
23     {
24
25         int u=q[head];
26
27         if(u==n) return;
28
29         if(!v[a[u]])
30
31         {
32
33             q[++tail]=a[u];
34
35             ans[a[u]]=ans[u]+1;
36
37             v[a[u]]=1;
38
39         }
40
41         if(u<n&&!v[u+1])
42
43         {
44
45             q[++tail]=u+1;
46
47             ans[u+1]=ans[u]+1;
48
49             v[u+1]=1;
50
51         }
52
53         if(u>0&&!v[u-1])
54
55         {
56
57             q[++tail]=u-1;
58
59             ans[u-1]=ans[u]+1;
60
61             v[u-1]=1;
62
63         }
64
65         ++head;
66
67     }
68
69
70
71 }
72
73 int main()
74
75 {
76
77     cin>>n;
78
79     if(n==1)
80     {
81         cout<<"0"<<endl;
82         return 0;
83     }
84
85     for(int i=1; i<=n; i++)
86
87         cin>>a[i];
88
89     bfs();
90
91     cout<<ans[n];
92
93     return 0;
94
95 }

no ac

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<queue>
 5 #include<cstdlib>
 6 using namespace std;
 7 const int MAXN=10000001;
 8 int n;
 9 int a[MAXN];
10 int vis[MAXN];
11 int dis[MAXN];
12 void bfs()
13 {
14     int step=0;
15     queue<int>q;
16     q.push(1);
17     vis[a[1]]=1;
18     dis[a[1]]=1;
19     while(q.size()!=0)
20     {
21         int p=q.front();
22         if(p==n)return ;
23         q.pop();
24                 if(vis[a[p]]==0)
25                 {
26                     q.push(a[p]);
27                     dis[a[p]]=dis[p]+1;
28                     vis[a[p]]=1;
29                 }
30                 if(vis[p+1]==0&&p<n)
31                 {
32                     q.push(p+1);
33                     dis[p+1]=dis[p]+1;
34                     vis[p+1]=1;
35                     //a[p]++;
36                 }
37                 if(vis[p-1]==0&&p>0)
38                 {
39                     q.push(p-1);
40                     dis[p-1]=dis[p]+1;
41                     vis[p-1]=1;
42                 }
43     }
44
45 }
46 int main()
47 {
48     scanf("%d",&n);
49     for(int i=1;i<=n;i++)
50     {
51         scanf("%d",&a[i]);
52     }
53     bfs();
54     printf("%d",dis[n]);
55     return 0;
56 }

时间: 2024-12-28 21:34:24

2292 图灵机游戏的相关文章

【codevs】2292图灵机游戏

题 Shadow最近知道了图灵机是什么(Shadow:就是一行格子和一个机器头移来移去的呗!),于是他突发奇想,创造了一个新游戏——“图灵机游戏”(Shadow:好听吧?). 游戏规则如下: 在一条长长的纸上有N个格子,每个格子上都有一个数,第i格的数记为Ai,机器头刚开始在第1格.这个游戏有两个操作: 1.如果现在在第i格,则可以移动机器头到第Ai格: 2.把某个Ai减少或增加1. 然而,fotile96看了之后却不以为然.“嗯,你挑战一下用最少次数使机器头到达第N格吧,这样好玩些……” 现在

CodeVS 2292 图灵机游戏

怎么说呢..这道题断断续续地调了两个晚上..这题通过率也是感人啊.. 题目大意:给定一串序列,有两个操作,开始位置在1,求最少多少步能到达n.有两个操作: 1.如果现在在第i格,那么可以跳到第a[i]格: 2.把某一个a[i]加1或减1. 算法:SPFA or bfs(我写的是spfa..但是好像bfs更好写=_=). 一开始点开这道题,一眼看过去就是DP..(成功被DP地套路洗脑..),然后推了十几分钟方程,搞不动啊.. 看了一眼标签,最短路..于是开始往SPFA方面想.. 首先建边就感觉非常

CODEVS2292(又是一道浪费时间的小题。。。)

题目描述 Description [Shadow 1]第二题 Shadow最近知道了图灵机是什么(Shadow:就是一行格子和一个机器头移来移去的呗!),于是他突发奇想,创造了一个新游戏——“图灵机游戏”(Shadow:好听吧?). 游戏规则如下: 在一条长长的纸上有N个格子,每个格子上都有一个数,第i格的数记为Ai,机器头刚开始在第1格.这个游戏有两个操作: 1.如果现在在第i格,则可以移动机器头到第Ai格: 2.把某个Ai减少或增加1. 然而,fotile96看了之后却不以为然.“嗯,你挑战

图灵机

图灵机(英语:Turing machine),又称确定型图灵机,是英国数学家艾伦·图灵于1936年提出的一种抽象计算模型,其更抽象的意义为一种数学逻辑机,可以看作等价于任何有限逻辑数学过程的终极强大逻辑机器. 目录 [隐藏] 1图灵的基本思想 2图灵机的正式定义 3图灵机的基本术语 4图灵机的例子 5通用图灵机 6图灵机的变体 7图灵可计算性 8其它等价的计算模型 9参考文献 10外部链接 图灵的基本思想 图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,他把这样的过程看作下列两种简单的

【游戏设计模式】之三 状态模式、有限状态机 &amp; Unity版本实现

本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/52824776 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 游戏开发过程中,各种游戏状态的切换无处不在.但很多时候,简单粗暴的if else加标志位的方式并不能很地道地解决状态复杂变换的问题,这时,就可以运用到状态模式以及状态机来高效地完成任务.状态模式与状态机,因为他们关联紧密,常

康托生命游戏与通用图灵机

PS:今年春天时的一篇读书笔记 正文: 好开心,一年多来再次能看到厘清这么多疑问的书.丹尼尔丹尼特的<自由的进化>:但我们谈论自由时我们谈些什么?自由并非天赋,它又是如何一步步进化的?自由意志如何与一个决定论的世界相容? 这里有一个非常有趣的游戏,这个简单的模型可以如此有力,帮我们思考决定论下是如何产生“避免者”的.可以厘清思考道路上众多的障碍中的第一个:决定论是如何不意味着“不可避免”的.(CH2) 康托生命游戏(Conway's Game of Life) 康托生命生活在一个二维的平面世界

20170913自制猜数字游戏

/* 猜数字:系统随机生成一个四位数,请根据下列判断猜出来 A:数值正确,位置正确 B:数值正确,位置不正确 C:数值不正确 */ #include<stdio.h> #include<time.h> #include<stdlib.h> #pragma warning (disable:4996) #define pUCharHead unsigned char * //以数组形式返回n个无重复的随机数,范围可指定[min,max] pUCharHead GenNoR

洛谷P1199 三国游戏

题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之间有一个"默契值",表示若此两位武将作为一对组合作战时,该组合的威力有多大.游戏开始前,所有武将都是自由的(称为自由武将,一旦某个自由武将被选中作为某方军队的一员,那么他就不再是自由武将了),换句话说,所谓的自由武将不属于任何一方. 游戏开始,小涵和计算机要从自由武将中挑选武将组成自己的军

游戏开发 系统app开发游戏定制开发找谁

梦幻珍珠港理财拆分游戏系统软件开发怎么做?找[江生:185-2911-8412 微电]. 梦幻珍珠港拆分游戏平台开发.梦幻珍珠港理财全网模式开发.梦幻珍珠港收益模式介绍开发. 梦幻珍珠港拆分游戏系统源码搭建平台!!我们是软件开发,玩家勿扰!非平台客服,玩家勿扰!] 游戏规则: 一.开发新会员要从您的库房扣除3 03颗珍珠,体系扣除5颗珍珠,新会员有298颗珍珠. 二.推荐老友,推荐人能够得到第一代会员的2%,第二代会员的1%,第三代会员的0.5%,一代的收益就是5.96颗珍珠奖赏(可转换为等量可