uva11198 Dancing Digits

2024-06-12 17:58
文章标签 digits dancing uva11198

本文主要是介绍uva11198 Dancing Digits,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简单题,直接暴力,而且不需要太多剪枝就能过。

忘了写insert函数的返回值导致wa一次,怎么感觉oj上的编译器和我电脑上的g++不一样


#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define HASHSIZE 40000
#define MAX 50000
using namespace std;char prime[16]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0};//0 to 15
int input[8],head[HASHSIZE],next[MAX],s[MAX][8],steps[MAX],front,rear,flag,all;int isprime(int index)
{if(index-1>=0&&s[rear][index-1]*s[rear][index]<0&&prime[abs(s[rear][index-1])+abs(s[rear][index])]==1)return 1;if(index+1<8&&s[rear][index+1]*s[rear][index]<0&&prime[abs(s[rear][index+1])+abs(s[rear][index])]==1)return 1;return 0;
}int hash(int cur)
{int value=0,i;for(i=0;i<8;i++)value=(value*10+abs(s[rear][i]))%HASHSIZE;//abs放错了位置return value;
}int insert(int cur)
{int hashvalue=hash(cur);int u=head[hashvalue];while(u!=-1){if(memcmp(s[cur],s[u],8*4)==0)return 0;u=next[u];}next[cur]=head[hashvalue];head[hashvalue]=cur;return 1;//返回值忘了写
}void toget()
{int i,j,t,a,b,help;for(i=0;i<8;i++)//起始{for(j=0;j<8;j++)//目标{if(j==i)continue;memcpy(s[rear],s[front],8*4);help=s[rear][i];if(j<i){for(t=i;t>=j+1;t--)s[rear][t]=s[rear][t-1];s[rear][j]=help;}else if(j>i){for(t=i;t<=j-1;t++)s[rear][t]=s[rear][t+1];s[rear][j]=help;}if(isprime(j)){if(insert(rear)){steps[rear]=steps[front]+1;rear++;}}}}
}void bfs()
{int i,j;front=0,rear=1,flag=0;memcpy(s[front],input,8*4);steps[front]=0;memset(head,-1,HASHSIZE*4);while(front<rear){if((abs(s[front][0])==1)&&(abs(s[front][1])==2)&&(abs(s[front][2])==3)&&(abs(s[front][3])==4)&&(abs(s[front][4])==5)&&(abs(s[front][5])==6)&&(abs(s[front][6])==7)&&(abs(s[front][7])==8)){flag=1;all=steps[front];break;}toget();front++;}if(flag==0)printf("-1\n");elseprintf("%d\n",all);
}int main()
{int i,j,count=1;while(scanf("%d",&input[0])&&input[0]){for(i=1;i<8;i++)scanf("%d",&input[i]);printf("Case %d: ",count++);bfs();}return 0;
}

这篇关于uva11198 Dancing Digits的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054929

相关文章

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

题意是求在base进制下的 n!的结果有几位数,末尾有几个0。 想起刚开始的时候做的一道10进制下的n阶乘末尾有几个零,以及之前有做过的一道n阶乘的位数。 当时都是在10进制下的。 10进制下的做法是: 1. n阶位数:直接 lg(n!)就是得数的位数。 2. n阶末尾0的个数:由于2 * 5 将会在得数中以0的形式存在,所以计算2或者计算5,由于因子中出现5必然出现2,所以直接一

ural 1014. Product of Digits贪心

1014. Product of Digits Time limit: 1.0 second Memory limit: 64 MB Your task is to find the minimal positive integer number  Q so that the product of digits of  Q is exactly equal to  N. Inpu

【FZU】2105 Digits Count 线段树

传送门:【FZU】2105 Digits Count 题目分析:与、或、异或三种操作都是每一位相互独立的,所以可以将线段树建四棵,分别对应一位,and和or操作相当于覆盖操作,xor操作相当于反转操作,就和普通的线段树方法类似,设立两个lazy标记即可。查询的时候求得每一位的1的个数*权重(1,2,4,8),全部累加就是答案。 代码如下: #include <cst

Subtract the Product and Sum of Digits of an Integer

Given an integer number n, return the difference between the product of its digits and the sum of its digits. Example 1: Input: n = 234Output: 15 Explanation: Product of digits = 2 * 3 * 4 = 24

java 2.6** Summing the digits in an integer

例如 : 999 process: sum=9+9+9=27; 例如 : 932 process: sum=9+3+2=14;   import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner input=new Scanner(System.in);int

HDU 5533 Dancing Stars on Me (2015ACM/ICPC亚洲区长春 计算几何)

【题目链接】:click here~~ 【题目描述】: Dancing Stars on Me Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 141    Accepted Submission(s): 96

codeforces 289 C Sums of Digits

贪心,做了两个半小时没做出来!主要在于求有k位且恰比某个数大的最小值,从左到右检查可以加1的位,若后面的位满足条件,再根据solve中的方法满足条件的最小值。 #include<iostream>#include<string>#include<cstring>#include<cstdio>#include<cmath>#include<iomanip>#include<map

F - Problem where +s Separate Digits

算第三遍了。。都没有想透 。。 而且这题的解法非常多样。。有正序 逆序 递推的方式也非常多。 下面是找到的一个感觉相对比较简洁的。(核心代码) 有兴趣再看吧。。先pass了。 //上面都是mod的模版部分 省略掉 下面才是核心代码Z base[N], p[N];void solve() {string s;cin >> s;n = s.size();base[0] = 1;p[0] = 1

Dancing links 基础题

全部都是数独类的题目 POJ 3074 </pre><pre name="code" class="cpp">// whn6325689// Mr.Phoebe// http://blog.csdn.net/u013007900#include <algorithm>#include <iostream>#include <iomanip>#include

入门三.HTB--Dancing(6.18)

大佬 https://www.cnblogs.com/Hekeats-L/p/16535920.html 任务1 SMB 即Server Message Block(服务器消息块),是一种文件共享协议。当文件原件在你的A电脑上,而你想在局域网下用你的手机、iPad或是另一台电脑来访问A电脑上的该文件时,你可能需要用到SMB共享。 任务2 SMB端口服务 nmap -sV