d、牛牛與整除分塊
思路:整數分塊有乙個性質,對於乙個整數n,當k <= n
\sqrt
n+ 1 時,每個[n/k]都是不同的,否則看n/k是幾,然後利用對稱軸x = n
\sqrt
n對稱過來
(圖源自出題人)
}f、牛牛與交換排序
思路:如果有解的話k值一定是唯一的,那麼先確定k值,然後判斷這個k值是否可行。
手寫乙個雙端佇列,正常情況下佇列頭進尾出,翻轉後尾進頭出,用乙個變數記錄是否翻轉的狀態
**:
#include
using
namespace std;
const
int n =
1e5+5;
int a[n]
, pos[n]
;struct deq
void
push_back
(int x)
intfront()
void
pop_front()
}q;int
main()
int k =0;
for(
int i =
1; i <= n; i++)}
if(!k)bool f =1;
q.l = n -
5, q.r = n -5;
for(
int i =
1; i <= k; i++
) q.
push_back
(a[i]);
for(
int i =
1; i <= n; i++)}
q.pop_front()
; q.
push_back
(a[i + k]);
}if(f)printf
("yes\n%d"
, k)
;else
puts
("no");
return0;
}
h、牛牛與棋盤
思路:簽到。。。
**:
#include
using
namespace std;
intmain()
printf
("\n");
}return0;
}
i、牛牛的「質因數」
思路:用陣列 f[i] 來表示整數 i 的質因子拼接成的數,對於每個質因子,若其是質數,則可以將n以內所有 i
ki^k
ik用 k 個 i 表示存起來,對於不是 i
ki^k
ik但是 i 的倍數可以將質因子 i 先加入這個數,後面再加入其它的質因子
列出狀態轉移方程:f[j] = (f[j/i] * fun(i)) + i (其中 j 為 n 以內 i 的倍數)
**:
#include
using
namespace std;
typedef
long
long ll;
const
int n =
4e6+
5, mod =
1e9+7;
int n;
ll ans;
ll f[n]
;int
fun(
int q)
intmain()
}for
(int i =
2; i <= n; i++
) ans =
(ans + f[i]
)% mod;
cout << ans <<
"\n"
;return0;
}
j、牛牛想要成為hacker
思路:前面用斐波那契數列填充,後面全部用1即可
**:
#include
using
namespace std;
intmain()
for(
int i =
41; i <= n; i++
) cout <<
1<<
' ';
return0;
}
2020牛客寒假演算法基礎集訓營第二場(補題)
題目描述 牛牛和 牛可樂在玩石頭剪刀布。眾所周知,石頭剪刀布的規則是這樣的 牛牛和 牛可樂進行了多輪遊戲,牛牛總共出了 a 次石頭,b 次剪刀,c 次布 牛可樂總共出了 x 次石頭,y 次剪刀,z 次布。你需要求出 牛牛最多獲勝多少局。輸入描述 第一行,三個非負整數 a,b,c 第二行,三個非負整數...
2023年牛客寒假集訓營第五場題解
c 石子遊戲 思路 利用差分陣列將區間修改轉化為兩個端點處的單點修改,按照每次新增乙個長度為 k 的區間的規則,首先從左到右將所有點補到該點左邊比它高的點的高度,再從右到做將所有點補到該點右邊比它高的點的高度,最後特判一下第 n k 1 個點 因為差分時以該點為左端點的區間右端點無法判斷 然後如果能...
2023年牛客寒假集訓營第一場題解
a 串 思路 一共n個字元,可以轉化為 i 1 i n 個字母中包含 us 的方案數之和 用 f i 2 1 0 表示前 i 個字母中 含有us 含u但不含us 既不含u也不含us 的方案數 然後可得狀態轉移方程 f i 0 25 f i 1 0 前i 1個字元不含u也不含s,那麼第 i 個字元除了...