2292 图灵机游戏
2292 图灵机游戏
时间限制: 1 s
空间限制: 64000 KB
题目等级 : 黄金 Gold
作者:自为风月马前卒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【Shadow 1】第二题
Shadow最近知道了图灵机是什么(Shadow:就是一行格子和一个机器头移来移去的呗!),于是他突发奇想,创造了一个新游戏——“图灵机游戏”(Shadow:好听吧?)。
游戏规则如下:
在一条长长的纸上有N个格子,每个格子上都有一个数,第i格的数记为Ai,机器头刚开始在第1格。这个游戏有两个操作:
1.如果现在在第i格,则可以移动机器头到第Ai格;
2.把某个Ai减少或增加1。
然而,fotile96看了之后却不以为然。“嗯,你挑战一下用最少次数使机器头到达第N格吧,这样好玩些……”
现在,Shadow已经快Crazy了。于是,Shadow把脸转向了你……
1行,1个整数,为最少的操作次数。
3
对于30%的数据,1≤N≤10;
对于60%的数据,1≤N≤1000;
对于100%的数据,1≤N≤100000,1≤Ai≤N。
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(a[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 }
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
26 | 27 | 28 | 29 | 30 | 31 | 1 | |||
2 | 3 | 4 | 5 | 6 | 7 | 8 | |||
9 | 10 | 11 | 12 | 13 | 14 | 15 | |||
16 | 17 | 18 | 19 | 20 | 21 | 22 | |||
23 | 24 | 25 | 26 | 27 | 28 | 1 | |||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
谢谢拨珠!qwq
应该是 lcp(x,y)=min(H[x+1…y])
两个后缀的最大公共前缀 假了
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签