魔法數字
(a.pas/.c/.cpp)
時間限制:1.0s,空間限制131072 kb
題目描述:
給乙個六位數a 和另外乙個六位數b.
你有一根魔法棒,初始時指向a 的最左邊數字,每一次你可以選擇下列操作
之一:
1.將當前魔杖指向的數字與最左端的乙個數字調換位置。
2.將當前魔杖指向的數字與最右端的乙個數字調換位置。
3.將當前魔杖指向的數字+1。(若當前魔杖指向的數字為9 則無效)
4.將當前魔杖指向的數字−1。(若當前魔杖指向的數字為0 則無效)
5.將當前魔杖向右移動一位。
6.將當前魔杖向左移動一位。
輸入描述:
多組資料,處理到eof
對於每組資料,包含兩個6 位數a,b
輸出描述:
對於每組資料,輸出一行表示答案..
樣例輸入:
1 123456 654321
樣例輸出:
11 資料範圍:
100%的資料保證:1 <= 資料組數 <= 200
雜湊收好
#include
#include
#define maxn 3000005
#define hashxor 7712122068ll
#define hashor 111827282ll
#define hashmod 1000007
#define hashand 2332333
const unsigned int cnt = ;
inline int
abs ( int a )
#define min(a, b) ((a) < (b) ? (a) : (b))
int a, b, fr, tl, ans, ord, state_cnt, val, nxt[hashmod], head[hashmod], tmp[10], target[10];
struct state
state ( int
s, int v ) : s ( s ), v ( v )
} q[maxn], cur;
inline int hash_val ( int& x )
inline short insert ( int
pos )
nxt[pos] = head[val];
head[val] = pos;
return1;}
int bfs ( int& init ) else --tl;
tmp[pos] ^ tmp[0] ? tmp[pos] ^= tmp[0] ^= tmp[pos] ^= tmp[0] : 0;
}flag = ( pos == 5 || (!pos && !tmp[5]) ) ? 0 : 1;
if ( flag ) else --tl;
tmp[pos] ^ tmp[5] ? tmp[pos] ^= tmp[5] ^= tmp[pos] ^= tmp[5] : 0;
}if ( pos
< 5 ) else --tl;
}if ( pos ) else --tl;}}
return tl;
}int main ( )
memset ( head, 0, sizeof head );
ord = 5;
while ( ~ord ) target[ord --] = b % 10, b /= 10;
state_cnt = bfs ( a );
ans = 0x3f3f3f3f;
i = 1;
loop:;
q[i].v /= 10;
ord = 5;
while ( ~ord ) tmp[ord --] = q[i].v % 10, q[i].v /= 10;
static int step;
step = q[i].s;
for ( j = 0 ; j < 6; ++j )
if (target[j] ^ tmp[j] && !q[i].go[j]) else step += abs(target[j] - tmp[j]);
ans > step ? ans = step : 0;
if ( ++i <= state_cnt ) goto loop;
printf ( "%d\n", ans );
}}
關於魔法數值 魔法數字 魔法值
其實這幾個詞代表的是乙個意思,只是不同的叫法,所謂魔法數值是指在 中直接出現的數值,只有在這個數值記述的那部分 中才能明確了解其含義。而在程式設計領域指的是莫名其妙出現的數字,數字的意義必須通過詳細閱讀才能推斷出來。一般魔法數字都是需要使用列舉變數來替換的 魔法數值使 的可讀性大大下降。而且,如果同...
NOIP模擬 魔法數字
在數論領域中,人們研究的基礎莫過於數字的整除關係。一般情況下,我們說整除總在兩個數字間進行,例如 a b a能整除b 表示 b 除以 a 的餘數為 0 我們稱乙個數字 x 是魔法的,當且僅當 x 是整數,且它能被 k 及 k 以上種一位數整除,要求這若干種一位數均在 x 的十進位制表示中出現。給出整...
記錄 C 程式設計魔法數字6174
乙個四位數的魔法數字。描述 第一步 乙個四位數拆分每一位,成四個數字 第二步 用第一步拆分的四個數子組成乙個最大四位數和乙個最小四位數 第三步 用第二步中的最大數減去最小數,之差等於6174則第一步原始四位數是魔法數字 否則將差進行第一步操作,依次迴圈,當迴圈15次之後不再迴圈。created by...