本題與郭老師本週講解的例題熄燈問題類似,可以使用二進位制表示進行列舉。每個按鈕有按下、不按下兩種選擇(分別用0、1兩個狀態表示)。每個按鈕最多隻需要按下一次,因為連續兩次按下會恢復原狀態。對於每乙個按鈕,當其狀態確定後;為使其達到目標狀態,只能通過其右側按鈕進行控制。因此,最左側按鈕狀態確定後,其餘按鈕狀態隨即確定。我們根據遍歷過程即可確定按鈕改變次數以及能否達成目標。
題目中沒有給定按鈕數量,我們需要根據第一行資料進行統計。
在某些特殊情況下,無論第乙個按鈕是否按下都能得到目標狀態;這時要選取改變次數較少的方案作為答案。
需要注意邊界情況,即按鈕左右兩個端點;本人選擇將陣列開大一些,兩個端點對左右按鈕的影響仍然在陣列中使其不必特別考慮。
問題分析清楚並給出坑點後,下面貼出ac**。
#include
#include
#include
using
namespace std;
int lock[32]
;//記錄密碼鎖初始狀態
int result[32]
;//記錄密碼鎖當前狀態
int target[32]
;//記錄密碼鎖目標狀態
int method[32]
;//記錄按鈕按動方案
bool flag =
false
;int
init()
for(
int i=
1;i<=n;
++i)
return n;
}void
set_bit
(int n)
intcount_one
(int n)
return counts;
}int
bin_lock
(int n)}if
(result[n]
== target[n]
)//恢復現場
for(
int i=
1;i<=n;
++i)
method[1]
=1;//第乙個按鈕按下
set_bit(1
);for(
int i=
2;i<=n;
++i)}if
(result[n]
== target[n]
)return min;
}int
main()
珠心算測驗 題解
見鏈結 首先,我要說一句 既然題目說要去重,那不就是用個set嗎?建立乙個查詢用的set和乙個去重的set。由於這道題n 100 n le 100 n 10 0,而stl的set插入與查詢的時間複雜度均為o log n operatorname o operatornamen o logn 所以可以...
期末測驗 課程水平綜合測驗 第10周
這是python123官網上聯合mooc的python程式設計 第10期 答案 基礎題,讀取輸入後把空格去掉即可 題目要求統計不重複的行,而集合中的元素正好擁有不重複的特性,由此想到使用集合進行訪問,能存進集合的行一定不重複,最後統計集合元素個數即可。s set num 0 f open latex...
鞍點 第7周測驗與作業
題目內容 給定乙個n n矩陣a。矩陣a的鞍點是乙個位置 i,j 在該位置上的元素是第i行上的最大數,第j列上的最小數。乙個矩陣a也可能沒有鞍點。你的任務是找出a的鞍點。輸入格式 輸入的第1行是乙個正整數n,1 n 100 然後有n行,每一行有n個整數,同一行上兩個整數之間有乙個或多個空格。輸出格式 ...