Solution -「AGC 020F」Arcs on a Circle
\(\mathscr{Description}\)
Link.
在一个周长为 \(c\) 的圆周上放置长度分别为 \(l_1,l_2,\cdots,l_n\) 的弧,每条弧的位置独立均匀随机。求圆周被弧的并完全覆盖的概率。
\(n\le6\),\(c\le50\),输入均为整数。
\(\mathscr{Solution}\)
记一个几乎没见过的 trick。顺便,真就 \(n\) 越小题越难呗。
不妨设 \(l_1\le\cdots\le l_n\),首先取 \(l_n\) 的左端点为坐标 \(0\) 点,将圆弧展开成数轴,如此可以避免“某条弧跨过 \(0\) 点向后覆盖”的情况。由于 \(l_i\) 为整数,所以所有 \(l\) 的端点坐标一定可以表示为 \(k+\epsilon\),其中 \(\epsilon\in S\subseteq[0,1)\),且 \(|S|\le n\)。忽略次要矛盾,\(|S|=n\)。直接枚举 \(l_{1..n-1}\) 的左端点 \(\epsilon\) 大小关系,就把问题转化到离散情况。状压 DP 一下即可。复杂度 \(\mathcal O(n!2^nn^2c^2)\)。
\(\mathscr{Code}\)
/*+Rainybunny+*/
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l, rep##i = r; i <= rep##i; ++i)
#define per(i, r, l) for (int i = r, per##i = l; i >= per##i; --i)
const int MAXN = 6, MAXC = 50;
int n, c, prm[MAXN + 5], l[MAXN];
double f[MAXN * MAXC + 5][1 << MAXN >> 1];
int main() {
scanf("%d %d", &n, &c);
rep (i, 0, n - 1) scanf("%d", &l[i]);
std::sort(l, l + n);
double ans = 0.; int all = 0;
rep (i, 0, n - 2) prm[i] = i;
do {
memset(f, 0, sizeof f);
f[l[n - 1] * n][0] = 1;
rep (i, 1, n * c) if (i % n) {
int r = i % n - 1;
rep (j, i, n * c) {
rep (S, 0, (1 << n >> 1) - 1) if (~S >> r & 1) {
f[std::min(c * n, std::max(j, i + l[prm[r]] * n))]
[S | 1 << r] += f[j][S];
}
}
}
ans += f[c * n][(1 << n >> 1) - 1], ++all;
} while (std::next_permutation(prm, prm + n - 1));
printf("%.12f\n", ans / all / pow(c, n - 1));
return 0;
}
Solution -「AGC 020F」Arcs on a Circle的更多相关文章
- Solution -「AGC 036D」「AT 5147」Negative Cycle
\(\mathcal{Descriprtion}\) Link. 在一个含 \(n\) 个结点的有向图中,存在边 \(\lang i,i+1,0\rang\),它们不能被删除:还有边 \(\l ...
- Solution -「AGC 016F」Games on DAG
\(\mathcal{Description}\) Link. 给定一个含 \(n\) 个点 \(m\) 条边的 DAG,有两枚初始在 1 号点和 2 号点的棋子.两人博弈,轮流移动其中一枚棋 ...
- Solution -「AGC 026D」Histogram Coloring
\(\mathcal{Description}\) Link. 有 \(n\) 列下底对齐的方格纸排成一行,第 \(i\) 列有 \(h_i\) 个方格.将每个方格染成黑色或白色,求使得任意完 ...
- Solution -「AGC 004E」「AT 2045」Salvage Robots
\(\mathcal{Description}\) Link. 有一个 \(n\times m\) 的网格.每个格子要么是空的,要么有一个机器人,要么是一个出口(仅有一个).每次可以命令所有机 ...
- Solution -「AGC 012F」「AT 2366」Prefix Median
\(\mathcal{Description}\) Link. 给定序列 \(\{a_{2n-1}\}\),将 \(\{a_{2n-1}\}\) 按任意顺序排列后,令序列 \(b_i\) 为前 ...
- Solution -「AGC 010C」「AT 2304」Cleaning
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个点的无根树,点有点权,每次选择两个不同的叶子,使它们间的简单路径的所有点权 \(-1\),问能否将所有点 ...
- Solution -「AGC 019E」「AT 2704」Shuffle and Swap
\(\mathcal{Description}\) Link. 给定 \(01\) 序列 \(\{A_n\}\) 和 \(\{B_n\}\),其中 \(1\) 的个数均为 \(k\).记 \( ...
- Solution -「AGC 019F」「AT 2705」Yes or No
\(\mathcal{Description}\) Link. 有 \(n+m\) 个问题,其中 \(n\) 个答案为 yes,\(m\) 个答案为 no.每次你需要回答一个问题,然后得知这个 ...
- Solution -「AGC 013E」「AT 2371」Placing Squares
\(\mathcal{Description}\) Link. 给定一个长度为 \(n\) 的木板,木板上有 \(m\) 个标记点,第 \(i\) 个标记点距离木板左端点的距离为 \(x_i\ ...
- Solution -「AGC 003D」「AT 2004」Anticube
\(\mathcal{Description}\) Link. 给定 \(n\) 个数 \(a_i\),要求从中选出最多的数,满足任意两个数之积都不是完全立方数. \(n\le10^5\) ...
随机推荐
- 2024Java编程思想第四版(完整中文高清pdf)
前言 再也不用担心书荒咯~~ 目录 Java编程思想第四版完整中文高清版(免费)***
- 使用wxpython开发跨平台桌面应用,对常用消息对话框的封装处理
在很多程序中,封装常用消息对话框有很多好处,尤其是在 GUI 应用程序中,本篇随笔结合.net 开发Winform界面的经验,对使用wxpython开发中 wx.MessageDialog 和 wx. ...
- 『玩转Streamlit』--图像与媒体组件
Streamlit中的图像与媒体组件,主要是st.image.st.audio和st.video. 它们是专为在Streamlit Web应用程序中嵌入和展示多媒体内容而设计的,这些组件不仅丰富了应用 ...
- Pcb-Merging:无需训练的多任务模型合并方案 | NeurIPS'24
来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Parameter Competition Balancing for Model Merging 论文地址:https://arxiv.or ...
- element ui table+分页 筛选全部数据
1. @filter-change 要写在table根元素,也就是<el-table @filter-change="filterChange"></el-tab ...
- 基于rsync+sersync的服务器文件同步
参考:https://github.com/wsgzao/sersync 原理 Synchronize files and folders between servers -using inotiy ...
- IntelliJ IDEA 中 ctrl + w 一键选中双引号中的字符串内容
记录下,之前一直知道在 IntelliJ IDEA 中快速选中一个词的快捷键是 ctrl + w,可是有时我们想一键选中双引号中的字符串内容,正好这个字符串中的内容有各种特殊字符,比如",& ...
- 如何在 Epicor 中计算绩效
制造性能是任何生产工序的关键,允许企业衡量和评估其效率和生产力水平. 我们将探讨如何在 Epicor 中计算制造性能.计算整体设备效率(OEE) 时性能指标的价值.如何解释制造指标以及在 Epicor ...
- Epicor 10 SaaS云登录
随着云计算的普及,几乎所有的软件都可以云化了,但事实上,并没有.尤其是在管理软件领域起步较早的 ERP 似乎在云化的道路上一直步履蹒跚. 随着公共云的成熟,人们的观念已经改变.云计算和 SaaS 提供 ...
- 【Kotlin】协程
1 前言 相较于 C# 中的协程(详见 → [Unity3D]协同程序),Kotlin 中协程更灵活,难度更大. 协程是一种并发设计模式,用于简化异步编程,它允许以顺序化的方式表达异步操作,避 ...