P1132 数字生成游戏
题目请见:传送门
以下为题解,直接从洛谷上搬过来的,还专门改了markdown,(汗)
宽搜 with 一些技巧
- 由于查询量很大,所以要预先处理所有答案
- 预处理当然是用
BFS,并同时进行delete,swap,add操作。注意,不能在x为队首元素时才更新答案,这样会使效率大打折扣(不更新的话,dist[x]任为-1,相当于少了判重) - 对于以上三种操作也有要求,一下进行一些优化(炒鸡模拟应该也能过,因为
swap(),嗯嗯): - 法一:见一楼的题解,不过有局限性
- 法二:针对
add(),和delete(),可以然枚举的状态有序化以达到优化效果,适用范围更广泛; - 以下为我的代码,其中结构体部分可以省去,
u.step可以直接用dist[x]代替。
#include<queue>
#include<cstdio>
#include<cstring>
main() {}
int dist[10000000];
struct in{int x,s;}u;
std::queue<in>que;
void tie(int *a,int <h,int x) {
lth=0;//解码
while(x) a[lth++]=x%10,x/=10;
}
int dis(int *a,int lth) {
int x=0;//还原
while(lth) x*=10,x+=a[--lth];
return x;
}
void add(int *a,int lth,int step) {
int tmp;//o(n)的add操作
a[lth]=a[lth-1];
for(int i=lth-1;i>=1;i--) {
for(int j=a[i+1]+1;j<a[i-1];j++) {
a[i]=j;
tmp=dis(a,lth+1);
if(dist[tmp]==-1) dist[tmp]=step,que.push((in){tmp,step});
}
a[i]=a[i-1];
}
}
void del(int *a,int lth,int step) {
int tmp,out=0;//o(n)的delete操作
for(int i=lth-1;i>=0;i--) {
out^=a[i]^=out^=a[i];
tmp=dis(a,lth-1);
if(dist[tmp]==-1) dist[tmp]=step,que.push((in){tmp,step});
}
}
void swa(int *a,int lth,int step) {
int tmp;//o(n*(n-1)/2)的swap操作
for(int i=0;i<lth;i++) {
for(int j=i+1;j<lth;j++) {
if(a[i]==a[j]) continue;
a[i]^=a[j]^=a[i]^=a[j];
tmp=dis(a,lth);
if(dist[tmp]==-1) dist[tmp]=step,que.push((in){tmp,step});
a[i]^=a[j]^=a[i]^=a[j];
}
}
}
int entry() {
memset(dist,-1,sizeof dist);
int a[10],lth,lmt,x;
scanf("%d",&x);
tie(a,lmt,x),dist[x]=0;
que.push((in){x,0});
while(!que.empty()) {
u=que.front();
que.pop();
memset(a,0,sizeof a);
tie(a,lth,u.x);
if(lth>1) del(a,lth,u.s+1),tie(a,lth,u.x);
if(lth>1) swa(a,lth,u.s+1),tie(a,lth,u.x);
if(lth<lmt) add(a,lth,u.s+1);
}
scanf("%d",&lmt);
while(lmt--) {
scanf("%d",&x);
printf("%d\n",dist[x]);
}
return 0;
}
int aptal=entry();
P1132 数字生成游戏的更多相关文章
- 洛谷P1132 数字生成游戏
P1132 数字生成游戏 题目描述 小明完成了这样一个数字生成游戏,对于一个不包含0的数字s来说,有以下3种生成新的数的规则: 将s的任意两位对换生成新的数字,例如143可以生成314,413,134 ...
- 【u109】数字生成游戏(gen)
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 小明完成了这样一个数字生成游戏,对于一个不包含0的数字s来说,有以下3种生成新的数的规则: 1. 将s ...
- java猜数字小游戏
/* * * 猜数字小游戏 * * 先由系统生成一个2-100之间的随机数字, * * 然后捕获用户从控制台中输入的数字是否与系统生成的随机数字相同, * * 如果相同则统计用户所猜的次数,并给出相应 ...
- 【转】Java数字抽奖游戏核心代码
1. [代码][Java]代码 package com.luiszhang.test; import java.util.Arrays; /** * NumberLotteryGame * 一个 ...
- [Python3 练习] 007 简单的猜数字小游戏
题目:简单的猜数字小游戏 (1) 描述 程序随机生成一个数字,玩家用键盘输入所猜数字,在规定次数内猜对为胜. (2) 要求 程序随机生成一个 1 到 100 的自然数 有 7 次机会去猜 机会用尽之前 ...
- 简单的猜数字小游戏--Python
猜数字小游戏: #coding=utf-8 import random answer =random.randint(1,100) #生成随机数 n=int (input("Please ...
- 算法:数字推盘游戏--重排九宫(8-puzzle)
一.数字推盘游戏 数字推盘游戏(n-puzzle)是一种最早的滑块类游戏,常见的类型有十五数字推盘游戏和八数字推盘游戏等.也有以图画代替数字的推盘游戏.可能Noyes Palmer Chapman在1 ...
- Java基础知识强化之IO流笔记70:Properties练习之 如何让猜数字小游戏只能玩5次的案例
1. 使用Properties完成猜数字小游戏只能玩5次的案例: 2. 代码实现: (1)猜数字游戏GuessNumber: package cn.itcast_08; import java.uti ...
- 洛谷P1118 数字三角形游戏
洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直 ...
随机推荐
- JAVA继承:编译与运行的关系(编译看左边,运行看右边)
"成员变量,静态方法看左边:非静态方法:编译看左边,运行看右边." 意思是:当父类变量引用子类对象时(Fu f = new Zi();),在这个引用变量f指向的对象中,他的成员变量 ...
- 语音识别完成诗句的查询功能,iOS AVSpeechSynthesis语音输出结果的诗歌APP
前言 当前的APP的查询都是使用手动输入,不仅效率低,而且查询的语句的限制比较大,不能够方便的扩展. 如果能方便的扩展查询语句,那么APP的使用就会有很大的灵活性.可以设计各种问句和语句,可以方便的和 ...
- asp.net C# 实现阿里大鱼和云片网短信接口类
云片网短信通用类 public class YunpianSMS { public YunpianSMS() { } /// <summary> /// 服务器HTTP地址 /// < ...
- Entity Framework Core 2.0 使用入门
一.前言 Entity Framework(后面简称EF)作为微软家的ORM,自然而然从.NET Framework延续到了.NET Core.以前我也嫌弃EF太重而不去使用它,但是EF Core(E ...
- 下载MySQL历史版本
下载MySQL历史版本 地址:http://downloads.mysql.com/archives/community/
- 【NOIP模拟】的士碰撞(二分答案)
Description
- 【hihoCoder】#1039 : 字符消除 by C solution
#1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...
- Android模拟器调试html5 app
主机:Linux x641.Android模拟器,模拟器设置--->打开Enable Usb Debug2.在主机上安装firefox,最低v36.菜单--->开发者--->WebI ...
- Android 开发笔记___EditText__文本编辑框
常用属性: inputType:(代码中:setiputtype)设置输入类型,多种类型中间用"|" maxlength:最大长度,无法通过代码设置 hint:提示文本内容,(代码 ...
- 块级元素行内元素以及display属性
1.什么叫做标签语义化? ->合理的标签做合适的事情 ->HTML中常用的标签都有哪些? (块状标签和行内标签) ->块状标签和行内标签的区别? (常用的有8条区别) 1)内联元素: ...