2014藍橋杯決賽 本科B組 生物晶元

2021-07-11 01:54:49 字數 1845 閱讀 2900

x博士正在研究一種生物晶元,其邏輯密集度、容量都遠遠高於普通的半導體晶元。

博士在晶元中設計了 n 個微型光源,每個光源操作一次就會改變其狀態,即:點亮轉為關閉,或關閉轉為點亮。

這些光源的編號從 1 到 n,開始的時候所有光源都是關閉的。

博士計畫在晶元上執行如下動作:

所有編號為2的倍數的光源操作一次,也就是把 246

8... 等序號光源開啟

所有編號為3的倍數的光源操作一次, 也就是對 369

... 等序號光源操作,注意此時6號光源又關閉了。

所有編號為4的倍數的光源操作一次。

.....

直到編號為 n 的倍數的光源操作一次。

x博士想知道:經過這些操作後,某個區間中的哪些光源是點亮的。

【輸入格式】

3個用空格分開的整數:n l r (l10^15) n表示光源數,l表示區間的左邊界,r表示區間的右邊界。

【輸出格式】

輸出1個整數,表示經過所有操作後,[l,r] 區間中有多少個光源是點亮的。

例如:輸入:52

3程式應該輸出:

2再例如:

輸入:1036

程式應該輸出:

3資源約定:

峰值記憶體消耗 < 256m

cpu消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入...」 的多餘內容。

所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。

注意: main函式需要返回0

注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。

注意: 所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。

提交時,注意選擇所期望的編譯器型別。

這道題一看,10^15的資料,很大,很嚇人。

仔細分析:

只要晶元操作的次數是奇數,就會開啟。是偶數,就會關閉。

我們求的是開啟的,就是說我們求操作的次數是偶數的晶元數。

什麼樣的晶元操作次數是偶數?

就是因數+1,為什麼+1,因為最後那個n也要算一次,而我們求因數是從2開始的。

我們可以得出:

void solve()

if(j*j==i)--tol;

}++tol;

if(tol&1)ans++;

}cout

《這樣的解法,可以水過40%的資料,然後,大資料怎麼辦?

10^15啊?怎麼辦?

我們分析,其實因子數都是成對出現的,比如12=2*3*4*6

其實12就是偶數次,所以,其實這些因子數我們都不用算。

因為對晶元操作偶數次還是原樣的。

那什麼數是奇數次呢?

對了!

就是完全平方數!

10^15以內的完全平方數有多少個?

我不知道。。

但是我知道4000萬的平方是10^16,比我們的資料規模還要大!

這個時候,我們就可以在1s之內求解了!

注意,我們求的在n和m以內的完全平方數是ans個,我們的答案是(m-n+1-ans)個。

因為:

直到編號為 n 的倍數的光源操作一次。

題目這句話.。

好了,附**:

#include

#include

using

namespace

std;

#include

typedef

long

long ll;

int main()

}cout

<<(ans-t)0;}

2014藍橋杯本科B組 螞蟻感冒

問題描述 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只...

17年藍橋杯本科B組決賽 對局匹配

小明發現 的自動對局系統在匹配對手時,只會將積分差恰好是k 的兩名使用者匹配在一起。如果兩人分差小於或大於 k,系統都不會將他們匹配。現在小明知道這個 總共有n 名使用者,以及他們的積分分別是 a1,a2,an 任意兩名使用者積分差不等於 k 輸入第一行包含兩個個整數n和k 第二行包含n 個整數a1...

藍橋杯 B組 決賽 感悟

其實並不是太想寫這個感悟,雖說沒什麼臉面,但還是有必要寫的,畢竟菜鳥還是得多反思呀。在藍橋盃國賽前一天晚上,自己的 qq 號被盜了,然後 訊息,我手速太慢,好叭,是它發的速度太快了,好多都沒撤回,當時弄得心態很崩.看來遇啥啥不順。在賽場上,其實個人認為做的比較小心,畢竟當時不能判呀,但是還是嗚嗚嗚 ...