CF1842G Tenzing and Random Operations 题解
1.[ARC126C] Maximize GCD 题解2.[ARC126D] Pure Straight 题解3.[ABC215D] Coprime 2 题解4.CF793F Julia the snail 题解5.CF1845D Rating System 题解6.[JOI 2023 Final] Advertisement 2 题解7.CF1513D GCD and MST 题解8.「JOISC 2016 Day 2」雇佣计划 题解9.[ABC134F] Permutation Oddness 题解10.CF1188D Make Equal 题解11.[ARC096E] Everything on It 题解12.[ARC117D] Miracle Tree 题解13.[JOISC 2014 Day3] 电压 题解14.CF803C Maximal GCD 题解15.CF1787E The Harmonization of XOR 题解16.CF1762D GCD Queries 题解17.[AGC061C] First Come First Serve 题解18.CF1575G GCD Festival 题解19.CF1656D K-good 题解20.CF1823F Random Walk 题解21.[ABC297G] Constrained Nim 2 题解22.CF1762E Tree Sum 题解23.CF1798E Multitest Generator 题解24.P7486 「Stoi2031」彩虹 题解25.CF1485C Floor and Mod 题解26.CF1681E Labyrinth Adventures 题解27.CF1023F Mobile Phone Network 题解28.CF258D Little Elephant and Broken Sorting 题解29.P7485 「Stoi2031」枫 题解30.[AGC030D] Inversion Sum 题解31.CF1815D XOR Counting 题解32.CF1864B Swap and Reverse 题解33.CF1864C Divisor Chain 题解34.CF1174E Ehab and the Expected GCD Problem 题解35.[AGC051B] Bowling 题解36.CF1626F A Random Code Problem 题解37.CF915G Coprime Arrays 题解38.[ABC318E] Sandwiches 题解39.[ABC318G] Typical Path Problem 题解40.CF838D Airplane Arrangements 题解41.[ABC319G] Counting Shortest Paths 题解42.[ABC313F] Flip Machines 题解43.[ABC320F] Fuel Round Trip 题解44.[ARC125B] Squares 题解45.[ARC124C] LCM of GCDs 题解46.[ARC135C] XOR to All 题解47.CF1874C Jellyfish and EVA 题解48.[ARC136C] Circular Addition 题解49.[ARC150D] Removing Gacha 题解50.高橋君 题解
51.CF1842G Tenzing and Random Operations 题解
52.[ARC167D] Good Permutation 题解53.[AGC061A] Long Shuffle 题解54.[ARC104B] DNA Sequence 题解55.[ARC104C] Fair Elevator 题解56.[ARC104D] Multiset Mean 题解57.[ARC104E] Random LIS 题解58.[ABC327G] Many Good Tuple Problems 题解59.[ARC105C] Camels and Bridge 题解60.[ARC105D] Let's Play Nim 题解61.[ARC105E] Keep Graph Disconnected 题解62.[ARC105F] Lights Out on Connected Graph 题解63.[ARC106E] Medals 题解64.[ARC107F] Sum of Abs 题解65.[ARC106F] Figures 题解题意
给定一个长度为
从
中等概率选取一个 ,对于 ,执行操作 ,其中 是给定的常数。
求
(
题解
转化为求全部方案的和。
发现对于任意方案,最终求的式子都形如
-
选取
产生贡献; -
选取一个已经钦定了的操作产生的
; -
钦定一个新的操作并选取其产生的
。
故可以进行
-
在这个整式中选取了
,有 ; -
在这个整式中选取了一个已经钦定了的操作产生的
,枚举产生选取的 的那个操作,有 ; -
钦定一个新的操作并选取其产生的
,首先考虑从所有未钦定的 个操作中选取一个,接下来考虑将其钦定为 中的哪个点,有 。
那么整个过程中最多钦定
总复杂度
Code
#include <bits/stdc++.h>
typedef long long valueType;
typedef std::vector<valueType> ValueVector;
typedef std::vector<ValueVector> ValueMatrix;
constexpr valueType MOD = 1e9 + 7;
void Inc(valueType &a, valueType b) {
a = a + b;
if (a >= MOD)
a -= MOD;
}
valueType sum(valueType a, valueType b) {
return a + b >= MOD ? a + b - MOD : a + b;
}
valueType mul(valueType a, valueType b) {
return (long long) a * b % MOD;
}
void Mul(valueType &a, valueType b) {
a = (long long) a * b % MOD;
}
valueType pow(valueType a, valueType b) {
valueType result = 1;
while(b > 0) {
if (b & 1)
Mul(result, a);
Mul(a, a);
b = b >> 1;
}
return result;
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
valueType N, M, V;
std::cin >> N >> M >> V;
ValueVector A(N + 1);
for(valueType i = 1; i <= N; ++i)
std::cin >> A[i];
valueType const K = std::min(N, M);
ValueMatrix F(N + 1, ValueVector(K + 1, 0));
F[0][0] = 1;
for(valueType i = 1; i <= N; ++i) {
for(valueType j = 0; j <= K; ++j) {
Inc(F[i][j], mul(F[i - 1][j], A[i]));
Inc(F[i][j], mul(F[i - 1][j], mul(j, V)));
if (j > 0)
Inc(F[i][j], mul(F[i - 1][j - 1], mul(mul(M - j + 1, i), V)));
}
}
valueType ans = 0;
for(valueType i = 0; i <= K; ++i)
Inc(ans, mul(F[N][i], pow(N, M - i)));
ans = mul(ans, pow(pow(N, M), MOD - 2));
std::cout << ans << std::endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗