UVA_11198

这个题目是个隐式图搜索的题目,可以把数值和符号分别存在两个数组里面,然后进行广搜即可。

#include<stdio.h>#include<string.h>int st[50000][8],sign[50000][8],dis[50000];int head[1000003],next[50000];int target[8]={1,2,3,4,5,6,7,8};int isprime(int n){int i;for(i=2;i<n;i++)if(n%i==0)return 0;return 1;}int hash(int *A){int i,v=0;for(i=0;i<8;i++)        v=10*v+A[i];return v%1000003;}int insert(int s){int i,h;    h=hash(st[s]);for(i=head[h];i!=-1;i=next[i])if(memcmp(st[i],st[s],sizeof(st[i]))==0)break;if(i==-1)    {        next[s]=head[h];        head[h]=s;return 1;    }elsereturn 0;}int main(){int i,j,k,p,q,front,rear,t;    t=0;while(1)    {        scanf("%d",&st[0][0]);if(st[0][0]==0)break;if(st[0][0]<0)        {            st[0][0]=-st[0][0];            sign[0][0]=0;        }else            sign[0][0]=1;for(i=1;i<8;i++)        {            scanf("%d",&st[0][i]);if(st[0][i]<0)            {                st[0][i]=-st[0][i];                sign[0][i]=0;            }else                sign[0][i]=1;        }        front=rear=0;        memset(head,-1,sizeof(head));        insert(rear);        dis[rear]=0;        rear++;while(front<rear)        {if(memcmp(st[front],target,sizeof(target))==0)break;for(i=0;i<8;i++)            {for(j=0;j<i;j++)if((j!=0&&(sign[front][i]^sign[front][j-1])&&isprime(st[front][i]+st[front][j-1]))||((sign[front][i]^sign[front][j])&&isprime(st[front][i]+st[front][j])))                    {                        memcpy(st[rear],st[front],sizeof(st[rear]));                        memcpy(sign[rear],sign[front],sizeof(sign[rear]));                        p=st[rear][i];                        q=sign[rear][i];for(k=i;k>j;k--)                        {                            st[rear][k]=st[rear][k-1];                                sign[rear][k]=sign[rear][k-1];                        }                        st[rear][j]=p;                        sign[rear][j]=q;if(insert(rear))                        {                            dis[rear]=dis[front]+1;                            rear++;                        }                    }for(j=i+1;j<8;j++)if((j!=7&&(sign[front][i]^sign[front][j+1])&&isprime(st[front][i]+st[front][j+1]))||((sign[front][i]^sign[front][j])&&isprime(st[front][i]+st[front][j])))                    {                        memcpy(st[rear],st[front],sizeof(st[rear]));                        memcpy(sign[rear],sign[front],sizeof(sign[rear]));                        p=st[rear][i];                        q=sign[rear][i];for(k=i;k<j;k++)                        {                            st[rear][k]=st[rear][k+1];                                sign[rear][k]=sign[rear][k+1];                        }                        st[rear][j]=p;                        sign[rear][j]=q;if(insert(rear))                        {                            dis[rear]=dis[front]+1;                            rear++;                        }                    }            }            front++;        }        printf("Case %d: ",++t);if(front!=rear)            printf("%d\n",dis[front]);else            printf("-1\n");    }return 0;    }

  

转载于:https://www.cnblogs.com/staginner/archive/2011/09/18/2180596.html

UVA 11198 Dancing Digits相关推荐

  1. 11198 - Dancing Digits

    描述:坑人的一道题,不过也不难,就是数字交换,只有一正一负的数字才存在交换,并且交换之后不能形成素数 #include <cstdio> #include <cstdlib> ...

  2. UVA 11452 Dancing the Cheeky-Cheeky

    UVA 11452 "Dancing the Cheeky-Cheeky" 找循环节那里要从后往前找,以解决112234112234这样的数据 #include <bits/ ...

  3. 提取了下刘汝佳推荐的题号...

    今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started    10055 - Hashmat the Brave Warrior ...

  4. UVa11452 Dancing the Cheeky-Cheeky(kmp)

    使用kmp算法求得字符串的周期,然后根据长度以及周期找到字符串输出位置 代码参考: OJ/UVa/11452 Dancing the Cheeky-Cheeky at master · wuli249 ...

  5. 前缀函数及kmp算法

    1.字符串基础 1.1 字符集 一个字符集是一个建立了全序关系的集合,也就是说中的任意两个不两只的元素和都可以比较大小,要么,要么.字符集中的元素称为字符. 1.2 字符串 一个字符串S是将n个字符顺 ...

  6. Prefix function. Knuth–Morris–Pratt algorithm

    Prefix function. Knuth–Morris–Pratt algorithm Prefix function definition You are given a string \(s\ ...

  7. UVA - 10061 How many zero#39;s and how many digits ?

    n!=x*b^y, 当x为正整数时,最大的y就是n!末尾0的个数了, 把n,b分别拆成素因子相乘的形式: 比如, n=5,b=16 n=5,b=2^4, 非常明显,末尾0的个数为0 10进制时,n!= ...

  8. UVa 10061 How many zero's and how many digits?

    方法: factorial mod, logarithm 求trailing zeros,其实就是factorial mod 的应用, 求长度,利用log 函数.需要注意的是,答案为int(log(n ...

  9. uva 10061——How many zero\'s and how many digits ?

    题意:这道题开始是卡了很久的,题意是给定一个数n然后让你求B进制下n!有多少个零,和有多少位数,咋一看,是高精度,如果数论不是很熟系. 思路:开始是直接抛弃高精度的一来是存不下,二来没办法短时间计算出 ...

最新文章

  1. 3rd_party/flatbuffers/tmp/flatc: No such file or directory
  2. 【OpenGL】四、Visual Studio 2019 配置 GitHub ( 从 GitHub 上克隆项目 )
  3. Python编程基础:第四节 类型转换Type Cast
  4. 业务场景是什么意思_深度思考:麦乐积分兑换商城系统业务逻辑
  5. Layui中Jquery动态设置的select标签加载时而正常时而失效问题排查和解决
  6. python中repeat函数用法
  7. python字典的遍历方法_遍历python字典几种方法
  8. SAP 电商云 Spartacus 5_0.md 迁移文档的编写格式
  9. 每台计算机需要配置网关吗,每台计算机的IP地址和网关以及子网掩码的设置有哪些规律或者规则吗?...
  10. 毕业设计论文选题系统系统用例图_基于Web的毕业论文管理系统的设计与实现
  11. linux打开lua后中文有乱码,总结Lua使用中遇到的小问题
  12. bottleneck resnet网络_深度学习|图像分类:ResNet(二)
  13. mysql主从同步读写分离
  14. Android UI系列-----ScrollView和HorizontalScrollView
  15. [Android Pro] java.lang.IllegalStateException: Fragment(XXFragment) not attached to Activity异常
  16. svm 文本分类 matlab,livsvm文本分类总结详解
  17. JSTL-格式标签库
  18. 【Vue】报错Parsing error: No Babel config file detected for D:\VuecliWorkspace\vue_test\src\main.js.
  19. wuauclt.exe是什么进程?为什么运行?wuauclt.exe进程介绍
  20. asp网站如何设置默认页_IIS 7.5 在 Windows Server(R) 2008 R2

热门文章

  1. 51CTO‘s Bug?
  2. python遵循什么协议_《Python网络爬虫》2.3 Robots协议的遵守方式
  3. python的开发环境包括_下搭建 Python 开发环境
  4. 【系统架构设计师】软考高级职称,一次通过,倾尽所有,看完这篇就够了,论软件架构设计的重要性、本篇论文“未通过考试”,供分析参考
  5. python函数分为哪几种_python数据挖掘常用工具有哪几种?
  6. java登陆挤下去代码_application作用域实现用户登录挤掉之前登录用户代码
  7. php包含文件不存在,PHP包含文件错误,服务器有该文件,直接访问提示不存在
  8. 语言身高预测实验注意事项_?新预训练模型CodeBERT出世,编程语言和自然语言都不在话下...
  9. 保研到国防科大计算机,拿奖到“手软” 国防科技大学这个“学霸宿舍”集体保研...
  10. 程序员 论坛 linux,用了五年Linux,三分钟带你揭开Linux过程内幕