0x00基本演算法(練習)5 防線(題解)

2022-05-09 16:19:01 字數 1761 閱讀 5385

題目鏈結

【題意】

達達學習數學競賽的時候受盡了同仁們的鄙視,終於有一天......受盡屈辱的達達黑化成為了黑暗英雄怪獸達達。

就如同中二漫畫的情節一樣,怪獸達達打算毀掉這個世界。

數學競賽界的精英 lqr 打算阻止怪獸達達的陰謀,於是她集合了一支由數學競賽選手組成的超級行動隊。

由於隊員們個個都智商超群,很快,行動隊便來到了怪獸達達的黑暗城堡的下方。

但是,同樣強大的怪獸達達在城堡周圍布置了一條「不可越過」的堅固防線。

防線由很多防具組成,這些防具分成了 n 組。

我們可以認為防線是一維的,那麼每一組防具都分布在防線的某一段上,並且同一組防具是等距離排列的。

也就是說,我們可以用三個整數 s, e 和 d 來描述一組防具,即這一組防具布置在防線的 s,s + d,s + 2d,…,s + kd(k∈ z,s + kd≤e,s + (k + 1)d>e)位置上。

黑化的怪獸達達設計的防線極其精良。如果防線的某個位置有偶數個防具,那麼這個位置就是毫無破綻的(包括這個位置乙個防具也沒有的情況,因為 0 也是偶數)。

只有有奇數個防具的位置有破綻,但是整條防線上也最多只有乙個位置有奇數個防具。

作為行動隊的隊長,lqr 要找到防線的破綻以策劃下一步的行動。

但是,由於防具的數量太多,她實在是不能看出**有破綻。作為 lqr 可以信任的學弟學妹們,你們要幫助她解決這個問題。

【輸入格式】

輸入檔案的第一行是乙個整數 t,表示有 t 組互相獨立的測試資料。

每組資料的第一行是乙個整數 n。

之後 n 行,每行三個整數 si,ei,di,代表第 i 組防具的三個引數,資料用空格隔開。

【輸出格式】

對於每組測試資料,如果防線沒有破綻,即所有的位置都有偶數個防具,輸出一行 "there's no weakness."(不包含引號) 。

否則在一行內輸出兩個空格分隔的整數 p 和 c,表示在位置 p 有 c 個防具。當然 c 應該是乙個奇數。

【輸入樣例】:32

1 10 1

2 10 1

21 10 1

1 10 1

41 10 1

4 4 1

1 5 1

6 10 1

【輸出樣例】:

1 1 there's no weakness.

4 3

【資料範圍】

防具總數不多於10^8,

si≤ei,1≤t≤5,n≤200000,0≤si,ei,di≤2147483647

我們可以發現最多只有乙個位置有奇數,其他的位置的盾牌個數都是偶數,那麼我們做一遍字首和,那麼奇數個盾牌的位置以後的字首和都是奇數,很明顯我們可以\(o(n)\)的時間內算出\(0-i\)範圍內有多少個盾牌,那麼我們就二分一下,判斷字首和為奇數的最前的乙個位置,就是奇數盾牌的位置。

好題好題,反正我是不會做的。

#include#include#define  n  210000

using namespace std;

struct node

a[n];int n;

inline int mymin(int x,int y)

if(ans>=0)printf("%lld %d\n",ans,check(ans)-check(ans-1));

else printf("there's no weakness.\n");

} return 0;

}

演算法競賽高階指南 0x00

快速冪模板,寫一下快速冪的原理。我們知道,乙個數 n 在二進位制 也可以是其他進製 下可以被表示為 a 1 a 2 2 1 a 3 2 2 a m 2 那麼我們可以考慮將其分拆成二進位制狀態下的每一位,然後做冪運算。這樣做的時間複雜度為 o log 2 n 實現的過程類似於倒過來的分治 當然也可以直...

推薦系統實踐 0x00 序

最後還是找到了自己算是滿意的工作,也準備開始新的研究領域,推薦演算法。由於我之前的研究內容主要是圍繞著cv展開,所以還是需要提前學習一下推薦演算法的知識。目前選擇了 推薦系統實踐 這本書,看中了它能夠將知識點和 相結合的優勢,並不枯燥也有一部分專案實踐等等。這篇文章就算作自己開始讀這本 推薦系統實踐...

0x00 什麼是作業系統

作業系統網課筆記 使用者視角 pc使用者 追求方便,易用 高效能 主機使用者 關注資源利用率 手持裝置使用者 關心方便 電池續航時間 正是由於不同使用者,不同的應用場景對作業系統有不同分要求,就需要設計不同的作業系統,以適合使用者和應用的需求。這也是作業系統多樣化的原因。系統視角 1 管理所有資源 ...