題號題目
t1購物
t2交換
t3最少移動
t4飛行棋
得分280/400
直接計算
#include
#include
#include
#include
using
namespace std;
long
long t,n,x,k,js1,js2,ans;
intmain()
return0;
}
發現此題只有串頭和串尾會對答案有貢獻。
直接把串複製一遍,然後 o(n
)o(n)
o(n)
掃瞄找最大.
並對串長取 min
\min
min 。
#include
#include
#include
#include
using
namespace std;
int ans,maxn;
string s;
intmain()
cout<<
min(ans,n)
;return0;
}
此題如果總和均值是小數,就代表一定不可能實現,輸出 −1-1
−1.對於次數直接掃一遍陣列累計即可。
#include
#include
#include
#include
using
namespace std;
long
long t,n,js,ans;
long
long a[
1000010];
intmain()
if(js%n!=0)
ans=0;
int z=js/n;
for(
int i=
1; i<=n; i++)if
(a[i]
>z)
} cout<}return0;
}
顯然要棋子在 [1,
d)
[1,d)
[1,d
) 和 [d,
n]
[d,n]
[d,n
] 的時候分開做。
當棋子在 [1,
d)
[1,d)
[1,d
) 的時候,假設現在在位置 p
pp,骰子扔到的是 x
xx 點,那麼棋子可能會變到 p−x
p−xp−
x 或 x−p
x−px−
p 的位置。
發現只有當 x
xx 恰好等於 p
pp 的時候才可以結束,否則 p
pp 將變為依然在 [1,
d)
[1,d)
[1,d
) 中的另乙個位置 p
pp′。那麼其實等價於在 1∼d
−1
1∼d−1
1∼d−
1 中一直隨機乙個數,直到隨機到 1
11 時停止,求期望次數。
設期望 s
ss 次扔到點 1
11,那麼有
s =d
−2d−
1(s+
1)+1
d−
1s=\frac(s+1)+\frac
s=d−1d
−2(
s+1)
+d−1
1解方程得到 s=d
−1
s=d−1
s=d−1。
那麼當棋子在 [1,
d)
[1,d)
[1,d
) 時,期望 d−1
d−1d−
1 次才會回到點 0。
那麼當棋子所在位置 p≥d
p≥dp≥
d 時,由於只會不停往左走,所以可以設 f[i
]f[i]
f[i]
表示點 i
ii 開始期望多少次可以回到點 0
00,這樣是沒有後效性的。
得到dp轉移方程:
f [i
]=(∑
j=i−
d+1i
−1f[
j]+1
)+f[
i−d]
/d
f[i] = (\sum_^)+f[i-d]/d
f[i]=(
j=i−
d+1∑
i−1
f[j]
+1)+
f[i−
d]/d
字首和優化求和即可
時間複雜度 o(t
n)
o(tn)
o(tn)。
以上的部分解釋載自zycdalao的部落格
#include
#include
#include
#include
using
namespace std;
double sum[
1000010
],f[
1000010];
int t,n,d;
intmain()
printf
("%.2lf\n"
,f[n]);
}return0;
}
牛客模擬賽1 普及組
題號題目 t1牛牛的密碼 t2牛牛的跳跳棋 t3牛牛的最大興趣組 t4牛牛的滑動視窗 得分120 120 直接照題意模擬即可。include include include include using namespace std char xy 100010 dy 100010 sz 100010 ...
牛客OI周賽9 普及組
目錄a題 b題 c題 小q挺喜歡擼串的,沒錯,字串!你給小q送上了n個字串 對於乙個字串s,如果在小q擼掉 刪除 任意個字元之後,nowcoder 是其子串,則這個字串s是可擼的。小q最近切題切到手軟,想擼串散散心。如果你給他呈現的字串是可擼的,他會很開心,否則他會很桑心。輸入描述 乙個整數n,表示...
牛客IOI周賽22 普及組
1.戰爭尾聲 題目鏈結 題解 因為資料量非常小,直接遍歷每乙個點即可 include include include using namespace std typedef pair int,int pii double getlength double x,double y,pii v intma...