Open the Lock

Problem Description

Now an emergent task for you is to open a password lock. The password is consisted of four digits. Each digit is numbered from 1 to 9. Each time, you can add or minus 1 to any digit. When add 1 to ‘9‘, the digit will change to be ‘1‘ and when minus 1 to ‘1‘,
the digit will change to be ‘9‘. You can also exchange the digit with its neighbor. Each action will take one step. Now your task is to use minimal steps to open the lock. Note: The leftmost digit is not the neighbor of the rightmost digit.

Input

The input file begins with an integer T, indicating the number of test cases. Each test case begins with a four digit N, indicating the initial state of the password lock. Then followed a line with anotther four dight M, indicating the password which can open
the lock. There is one blank line after each test case.

Output

For each test case, print the minimal steps in one line.

Sample Input

2
1234
2144

1111
9999

Sample Output

2
4

Author

YE, Kai

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int f[10],a[10],b[10],mx;
int fun(int m)
{
    int sum,c[]={m/1000,m/100%10,m/10%10,m%10};
    for(int i=sum=0;i<4;i++)
    {
        if(abs(c[i]-b[i])<5)sum+=abs(c[i]-b[i]);
        else sum+=9-abs(c[i]-b[i]);
    }
    return sum;
}
int dfs(int sum,int temp)
{
    if(sum>999)
    {
        int i=fun(sum)+temp;
        if(mx>i)mx=i;
        return 0;
    }
    for(int i=0;i<4;i++)
    {
        if(!f[i])
        {
            f[i]=1;
            dfs(sum*10+a[i],temp++);
            f[i]=0;
        }
    }
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
      scanf("%1d%1d%1d%1d",&a[0],&a[1],&a[2],&a[3]);
      scanf("%1d%1d%1d%1d",&b[0],&b[1],&b[2],&b[3]);
    mx=10000;
    dfs(0,0);
    printf("%d\n",mx);
    }
   return 0;
}

Open the Lock,布布扣,bubuko.com

时间: 2024-12-24 21:51:56

Open the Lock的相关文章

Java并发(2):Lock

在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问.本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock. 也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述.本文先从synchronized的缺陷讲起,然后再讲述java.util.concurrent.locks包下常用的有哪些类和接口,最后

C# 多线程 lock 实例

class Program { static void Main(string[] args) { //在t1线程中调用LockMe,并将deadlock设为true(将出现死锁) int i = 10; while (i > 0) {  Thread t1 = new Thread(LockMe); t1.Start(true); Thread.Sleep(1000);  Console.WriteLine(string.Format("1.i:{0},开始调用LockMe :{1}&q

mysql启动报错:Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist

mysql在首次启动的时候可能会报错:Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist 这时候可以执行脚本 mysql_install_db –user=mysql –ldata=数据存放的路径

MySQL5.6.12 Waiting for commit lock导致从库hang住的问题剖析

nagios报警,线上一台从库检测不到slave状态,于是远程上去查看问题: 1,show slave status\G卡住: Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show slave status\G show slave status卡住了,动弹不了,这种情况还是第一次遇到. 2,看w负载无压力: [root@tmp3_72 ~]# w 13:23:31 u

Ubuntu15、Ubuntu14交换Ctrl和Caps Lock键

在Ubuntu12.04中,交换Ctrl和Caps Lock键非常简单,直接图形就可以设置,但是到了Ubuntu14之后居然没有了,只能去使用命令来设置了. setxkbmap -option ctrl:swapcaps 在终端输入如上命令就可以实现了,但是这样重启后就没有效果了. 在/etc/rc.local最后增加上这句话,重启后没有生效: 在/etc/profile最后中增加上这句话,重启后没有生效: 在/etc/bash.bashrc最后中增加这句话,重启后生效.

mysql Lock wait timeout exceeded

MySQL 事务没有提交导致 锁等待 Lock wait timeout exceeded java.lang.Exception:### Error updating database.  Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction### The error may involve defaultParameterMap### The error occurred wh

Java多线程之~~~Lock接口和ReentrantLock的使用

在多线程开发中,除了synchronized这个关键字外,我们还能通过Lock接口来实现这种效果.通过Lock接口来实现 这种多线程加锁效果的好处是非常的灵活,我们不在需要对整个函数加锁,而且可以很方便的把他放在我们函数的任何 一个地方,非常的称心,而且从效率上来说,使用Lock接口要比使用synchronized关键字效率高一些,下面我们来使用 一个例子来说明这种方法的使用. package com.bird.concursey.charpet3; public class Job imple

Cannot lock storage /tmp/hadoop-root/dfs/name. The directory is already locked.

[[email protected] bin]# ./hadoop namenode -format 12/05/21 06:13:51 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG:   host = nn01/127.0.0.1 STARTUP_MSG:  

synchronized 和 lock 的区别

lock更灵活,可以自由定义多把锁的加锁解锁顺序(synchronized要按照先加的后解顺序) 提供多种加锁方案,lock 阻塞式, trylock 无阻塞式, lockInterruptily 可打断式, 还有trylock的带超时时间版本. 本质上和监视器锁(即synchronized是一样的) 能力越大,责任越大,必须控制好加锁和解锁,否则会导致灾难. 和Condition类的结合.

SQL Server中如何定位Row Lock锁定哪一行数据

在SQL Server中有时候会使用提示(Hint)强制SQL使用行锁(Row Lock),前两天有个同事咨询了一个问题,如何定位Row Lock具体锁定了哪一行.其实这个问题只适合研究一下,实际意义并不大,因为找到.定位被锁定的行的代价开销较大,而意义却不怎么大,而且使用场景也很少.那么下面我们来探讨.研究一下这个问题吧: 在会话窗口(会话ID=65)下执行下面SQL语句,模拟SQL Server使用行锁锁定某一行记录: USE AdventureWorks2012; GO   SELECT