葉姐要想哥贈送一串位元手鍊,這個手鍊由0和
1組成。想哥買了手鍊
b,無意間得知葉姐想要同樣長度的手鍊
a。想哥囊中羞澀,只能手工調整手鍊。他希望最少通過以下操作進行最少步驟把b變成
a。注意:a != b
對於乙個串s:
操作1——選擇下標i,j,i != j:
·result = s[i] & s[j]
·s[i] = result & s[i]
·s[j] = result & s[j]
操作2——選擇下標i,j,i != j:
·result = s[i] | s[j]
·s[i] = result | s[i]
·s[j] = result | s[j]
操作3——選擇下標i,j,i != j:
·result = s[i] ^ s[j]
·s[i] = result ^ s[i]
·s[j] = result ^ s[j]
問想哥最少多少步能達成心願。如果想哥無法達成心願,輸出-1。
第乙個數為資料組數
t 接下來
2t行,第
2i - 1
行為手鍊b,第
2i行為手鍊
a 對於每組資料,輸出一行,最少的步驟數。特別地,如果無法達成,輸出-1。
2
101
010
1111
1010
2
-1
t<=5;
長度<=10^6;
碰到這種型別,一般都要先手動模擬,尋找規律。
通過手動計算可以發現,若a[i] == a[j],則三個運算均不會造成影響;只有a[i] != a[j]時,即乙個為0乙個為1,才會造成改變。
對於&:相當與把1變成0;對於|:相當於把0變成1;對於^,相當於交換。
所以,如果原串全為0或全為1,由於a!=b,所以是無解的;否則解的個數即為max(0變成1的數量,1變成0的數量),也就是說,盡量使用^交換一次性解決兩個,無法交換了再用&或|一次修改乙個。
1//我的版本
2 #include3 #include
4#define maxn 1000002
5int
main()623
if(ans_b0 == len || ans_b0 == 0
)27 printf("
%d\n
",max(t01,t10));28}
2930
return0;
31}3233
int max(int a,int
b)34
1//助教的版本
2 #include3 #include4 #include5
6const
int n=1000010;7
intlen,l,r,t,sum;
8char
a[n],b[n];
910 inline int max(int a,int
b) 13
14int
main()
23for(int i=0;ii)
24if(a[i]!=b[i])
25 a[i]=='
0' ? ++l : ++r;
26 printf("
%d\n
",max(l,r));27}
28return0;
29 }
第一次上機
1 已知a,b均是整型變數,寫出將a,b兩個變數中 的值互換的程式。知識點 變數和運算子綜合 應用 2 給定乙個0 1000的整數,求各位數的和,例 如345的結果是3 4 5 12注 分解數字既可以先 除後模也可以先模後除 知識點 變數和運算子 綜合應用 3 華氏溫度和攝氏溫度互相轉換,從華氏度變...
第一次上機
1 已知a,b均是整型變數,寫出將a,b兩個變數中的值互換的程式。知識點 變數和 運算子綜合應用 package aaaa public class caaas 2給定乙個0 1000的整數,求各位數的和,例 如345的結果是3 4 5 12注 分解數字既可以先 除後模也可以先模後除 知識點 變數和...
2018級第一次上機《點燈》題解
時間限制 300ms 記憶體限制 65536kb有n個燈,編號0 n 10 n 1,一開始都是關閉狀態。每次操作會撥動乙個區間 l,r 燈的開關,也就是說,對於燈i,l i rl i r,如果i是關閉狀態,則操作會使燈亮,反之會使燈滅。請問k次操作後有多少燈亮著。多組輸入資料 每組資料第一行兩個數n...