這道題我比賽的時候選擇了最後做,不為什麼就為了他那(好似)搜尋過不了、dp也沒得做的特性……
好了,廢話不多說上題目:
題目描述
西西需要把輸入的電壓1伏通過一系列電壓放大器放大成原來的n倍,然後輸出。
西西現在手上有兩種放大器:
第一種能夠把x伏的電壓放大成2x-1伏
第二種能夠把x伏的電壓放大成2x+1伏
放大器是串聯(即按順序放在一條線路上)的。
現在西西手上有用不完的放大器,他希望能組出乙個電路,使用數量最少的放大器,使得電壓被放大了剛好n倍。
輸入一行乙個正整數n(1<=n<=2*10^9)
輸出如果無法組成電路則輸出一行no solution
否則輸出兩行,第一行乙個整數表示最少的放大器個數k,第二行k個用空格隔開的1或2,表示放大器序列。1表示第一種,2表示第二種,其中左邊為輸入端。如果有多解輸出任意一組。
樣例輸入
5樣例輸出
22 1
資料範圍限制
20%的資料中 n<=1000
50%的資料中,n<=1000000
100%的資料如題。
提示先經過放大器2,12+1=3,然後經過13-1=5。滿足要求 。
題目概括……(好難啊)
給你乙個1,讓你經過多次操作(分兩種:2x+1&&2x-1)變為n這個數,求最少要多少步,並輸出操作序號。
主要思路(分兩種):
first.爆搜無極限,時間不允許啊(後面才知道我這句話是放屁)……
second.我們可以從奇偶性分析,一開始的1為奇數開始模擬一下所有步驟:
1.奇數×2+1=奇數
2.偶數×2+1=奇數
3.奇數×2-1=奇數
4.偶數×2-1=奇數
那這麼看來,這個變化中的序列肯定是個奇數序列了。那我們這時候可以拿個no solution的分了,只要n是偶數輸出no solution。
我們開始分析一下樣例:5
肯定是先第二種再第一種,這時我們反著推:(5+1)/2=3,(3-1)/2=1。
我們這時可以思考到:為什麼5只能+1再/2,而3可以-1再/2呢?我們可以先列乙個奇數表
表: 1 ,3 ,5 ,7 ,9 ,11 ,13 ,15 ,17 ,19……
標記 +1,-1,+1,-1,+1,-1, +1 ,-1, +1, -1……
我們可以發現+1,-1好像就是按他們在這個奇數數列中位置而變。那就是求項數mod 2==什麼了。
那這就好辦了每次去判斷現在他的項數為偶數就(x-1)/2否則就(x+1)/2。
code:
#include
using
namespace std;
int n;
void
putin()
intmain()
return0;
}
最後總結一下這道題:我一開始費什麼勁去鑽研這種方法,20分鐘打乙個爆搜他不香嗎?當然這道題除了爆搜還是有很多種方法(是不是大同小異呢?),但是我這種方法似乎還是難思考一點…… 1604 電壓放大器(amp)
題目描述 西西需要把輸入的電壓1伏通過一系列電壓放大器放大成原來的n倍,然後輸出。西西現在手上有兩種放大器 第一種能夠把x伏的電壓放大成2x 1伏 第二種能夠把x伏的電壓放大成2x 1伏 放大器是串聯 即按順序放在一條線路上 的。現在西西手上有用不完的放大器,他希望能組出乙個電路,使用數量最少的放大...
電壓放大器應用 如何使用諧振技術驅動高頻電磁體
諸如繼電器,螺線管,電感器,亥姆霍茲線圈,電磁體和電動機的電磁線圈通常需要大電流和高頻操作。在低頻下,使用波形放大器,可以直接驅動高電流通過線圈。線圈的電感足夠低,可以直接由放大器驅動,如圖1所示。線圈可以建模 簡單模型 作為與理想電感串聯的寄生電阻。寄生電阻一般較小。圖1.波形放大器直接驅動具有寄...
運算放大器 輸入失調電壓Vos
1.1 定義 為了抵消運放內部的dc失調而必須加在兩個輸入端之間的dc電壓,單位 伏特.1.2vos通常被建模為乙個加在同相輸入端上的電壓源.1.3有兩種測試輸入失調電壓的方法.dut的全稱是 被測器件 1.4vos通常由於電壓反饋放大器的輸入差分對的特性,不同工藝有不同的特點.雙極輸入級要比cmo...