大河有一些襪子,但經常十分散亂的堆放著。
有一天龍兒忍不住了,於是將襪子放到了乙個序列上(稱作襪子序列)。
每個襪子都有乙個dirtydirty值,定義襪子序列的dirtydirty值為max(
(dir
tylb
itan
ddir
tyl+
1bit
and⋯
bita
nddi
rtyr
)+(d
irty
lbit
ordi
rtyl
+1bi
tor⋯
bito
rdir
tyr)
)\max \left( (dirty_ \ bitand \ dirty_ \ bitand \ \cdots \ bitand \ dirty_) + (dirty_ \ bitor \ dirty_ \ bitor \ \cdots \ bitor \ dirty_) \right)
max((d
irty
lbi
tand
dirt
yl+1
bit
and⋯
bita
nddi
rtyr
)+(
dirt
ylb
itor
dirt
yl+1
bit
or⋯b
itor
dirt
yr)
),其中dir
ty
idirty_
dirtyi
表示 第i
ii只襪子的dir
ty
dirty
dirt
y值,bit
an
dbitand
bitand
表示按位與(c++
c++c+
+中是&
&&),bit
or
bitor
bito
r表示按位或(c++
c++c+
+中是|
||)。
簡而言之,就是找一段連續子串行,使得所有數字的按位與加上按位或最大。
如果這個襪子序列的dirtydirty值達到了某個閾值,那麼龍兒會討厭大河的。
大河當然不希望這樣了,於是她想知道這個襪子序列的dirtydirty值是多少。
第一行三個整數 n,b
,p
n,b,p
n,b,
p,分別表示數列長度和輸出相關的東西
第二行有 n
nn 個整數,表示這個數列的初始數值
設答案為 x
xx ,你需要輸出 (x+
233)
bmod
p(x+233)^ \,\, \text \,\,p
(x+233
)bmodp
10
11000000079
9400
8847
251
1≤n
,p≤1
05
1≤n,p≤10^5
1≤n,p≤
1050≤b
,dit
ryi≤
10
70 \le b, ditry_ \le 10^
0≤b,di
tryi
≤107對於
測試點1
和測試點
2的資料
,保證1
≤n
≤100
對於測試點1和測試點2的資料,保證 1 \le n \le 100
對於測試點1
和測試點
2的資料
,保證1
≤n≤1
00這道題看起來很難,但是我們用了乙個貪心之後,就沒有那麼難了。
(雖然對我來說還是很難)
那麼怎麼用貪心呢?
我們可以通過觀察和嘗試發現,把兩個數的和與或加起來,它的值一定會小於等於這兩個數的其中乙個。那麼,既然加多值會更小,那不如只拿乙個。
所以我們找到序列中最大的數,把它乘二(因為沒有進行與和或,所以與和或都是數本身)。再進行快速冪就可以了。
#include
#define ll long long
#define max(x,y) (x)>(y)?(x):(y);
using
namespace std;
ll n,b,p,maxn,x;
ll ksm
(ll di,ll zhi)
//快速冪
di=di*di%p;
zhi/=2
;}return ans%p;
}int
main()
maxn*=2
;//與和或相加,所以乘二
printf
("%lld"
,ksm
(maxn+
233,b));
//輸出
return0;
}
結論 大河的序列
luo gu luogu luogup 4144 p4144 p414 4大河有一些襪子,但經常十分散亂的堆放著。有一天龍兒忍不住了,於是將襪子放到了乙個序列上 稱作襪子序列 在序列裡,找一段連續子串行,使得所有數字的按位與加上按位或最大。第一行三個整數 n,b p n,b,p n,b,p 分別表示...
大河奔流的精神 俞敏洪
大河奔流的精神是什麼 一開始讀這本書的時候,我並沒有留意,沒有思考,思考書名給我什麼提示,只是簡簡單單想讀這本書。把書的第一章讀了,放下了一段時間,後來把書放在教室裡,之後便重新開始一次暢快的讀書之旅,最終終於把書讀完。回到最初的話題,大河奔流的精神是什麼 是堅持,是堅持不懈,是一天又一天的永不停息...
大河奔流的精神 俞敏洪
大河奔流的精神是什麼 一開始讀這本書的時候,我並沒有留意,沒有思考,思考書名給我什麼提示,只是簡簡單單想讀這本書。把書的第一章讀了,放下了一段時間,後來把書放在教室裡,之後便重新開始一次暢快的讀書之旅,最終終於把書讀完。回到最初的話題,大河奔流的精神是什麼 是堅持,是堅持不懈,是一天又一天的永不停息...