題目鏈結
牛牛中學為了給本校的oier放鬆心情,決定舉報一場校園活動。
現在學校的共有 個oier,學校想把他們分為一些小組進行乙個團隊遊戲。學校先了解了一下每個同學對這個團隊遊戲的了解程度。
為了遊戲的公平,學校需要使分組後的每乙個小組內所有人對遊戲的了解程度之和相等,但同學們並不希望完全由學校來給他們分組,所以這 個人站為了一行,學校只能將佇列中一段完整的子佇列作為乙個小組。
換句話說,如果你想讓位置為 x
xx 和 y
yy 的人在乙個小組裡,你就必須讓 x
xx 和 y
yy 之間的所有人在這個組裡面。
當然,我們知道如果只有乙個小組是無法進行遊戲的。
你需要判斷是否可以將他們成功分組進行遊戲,如果能成功分組進行遊戲就列印出最多能分為多少個小組,不能成功分組進行遊戲(所有人都在同乙個組裡)列印「-1」。
共兩行。
第一行乙個整數 ,表示佇列的長度 (2≤
n≤10
3)
( 2 \le n \le 10^3 )
(2≤n≤1
03)第二行是乙個長度為 的佇列,表示佇列中每乙個oier對遊戲的了解程度且每個人的了解程度在區間內。
如果能成功分組,列印出最多能分為多少個小組,不能成功分組(所有人都在同乙個組裡)列印「-1」。
5
31113
3
暴力分組即可,粗略算一下最壞情況的複雜度,是 900 萬,完全可以暴力分組,分的時候有一些小技巧:
對全是 0
00 的佇列,直接輸出佇列長度即可
對包含 0
00 的佇列,可以將這些 0
00 刪去,不難發現並不影響答案的正確性
ac**如下:
#include
using
namespace std;
typedef
long
long ll;
string s, s1 ="";
int ans =
0, n, sum =0;
intmain()
for(
auto i:s)
if(i !=
'0') s1 +
= i;
s = s1;
for(
int i =
1; i <= sum; i++
)else
if(ss == i)}if
(flag && ss ==
0) ans =
max(ans, cnt);}
cout <<
(ans ==1?
-1: ans)
;return0;
}
牛客練習賽76
是乙個博弈遊戲 注意到 m 1 n 5000 那麼我們是可以直接考慮爆搜的 總共n個回合,那麼兩個人就是2 n次操作 定義f a b 代表當 zzugzx 選了a的數,kurisu選了b的數,zzugzx贏的概率 a和b分別是n位m 1進製的數,代表n回合他抽到1 m的數放在1 n哪個位置 incl...
牛客練習賽76題解 A,C
思路 爆搜,列舉物件 乙個小組內所有人對遊戲的了解程度之和。之後判斷每個方案,在可行前提下的組數,取min即可 注 在m m 1 m m 1 m m 1 處除以2也可以,就不用逆元了 include include include include include include include in...
牛客題集 練習賽76
前段時間發現牛客這些比賽質量挺高的,打算寒假期間補一補 a直接列舉每個小組對遊戲的了解程度,然後每個人從前到後連著組隊,如果當前隊伍了解程度剛好等於列舉的了解值,說明能夠組成一隊,後面的人再自行一一組隊,否則,當前列舉值不符合條件。include define debug freopen r.txt...