简单声明

我是蒟蒻不会推式子。。。

所以我用的是乱搞做法。。。

大自然的选择

这里我用的乱搞做法被闪指导赐名为“自然算法”,对于这种输入信息很少的概率题一般都很适用。

比如此题,对于一组\(n,m\),我们可以进行\(10^6\)次随机,每次随机\(n\)个\(0\sim1\)之间的实数表示这个点在圆上的位置,然后我们暴力判断,用一个变量\(t\)记录下合法次数。

然后我们输出\(\frac t{10^6}\)就能得出大致概率了。

找规律

显然,上面这个“自然算法”精度误差较大,且我们要输出的是取模意义下的结果而非实数。

但是,该算法输出的结果,已经够我们找规律了。

首先,我们输入\(n=2,m=2,3,4,5\)可得\(1,\frac23,\frac12,\frac25\),即\(\frac2m\)。

然后,我们输入\(n=3,m=2,3,4,5\)可得\(\frac34,\frac13,\frac3{16},\frac3{25}\),即\(\frac 3{m^2}\)。

这时候我们似乎就可以大力猜测,答案就是\(\frac n{m^{n-1}}\)。

再代几组数据用“自然算法”验证,发现都符合这个结论,于是我们就可以姑且认为它正确了。

这样就过了。其实就是乱搞。

代码

“自然算法”:

#include<bits/stdc++.h>
#define T 1000000
#define R() 1.0*rand()/RAND_MAX//随机实数
using namespace std;
int n,m;double a[(int)1e7+5];
int main()
{
srand(time(NULL));int t=0;scanf("%d%d",&n,&m);for(int i=1;i<=T;++i)
{
for(int j=1;j<=n;++j) a[j]=R();sort(a+1,a+n+1);//随机n个点
double Mx=a[1]-a[n]+1;for(int j=1;j^n;++j) a[j+1]-a[j]>Mx&&(Mx=a[j+1]-a[j]);
1-Mx<1.0/m&&++t;//统计合法情况数
}return printf("%.7lf",1.0*t/T),0;
}

最终代码:

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define X 998244353
#define Qinv(x) Qpow(x,X-2)
using namespace std;
int n,m;
I int Qpow(RI x,RI y) {RI t=1;W(y) y&1&&(t=1LL*t*x%X),x=1LL*x*x%X,y>>=1;return t;}
int main()
{
freopen("ran.in","r",stdin),freopen("ran.out","w",stdout);
return scanf("%d%d",&n,&m),printf("%d",1LL*n*Qpow(Qinv(m),n-1)%X),0;//直接输出
}

【2019.8.7 慈溪模拟赛 T2】环上随机点(ran)(自然算法)的更多相关文章

  1. 【2019.8.15 慈溪模拟赛 T2】组合数(binom)(卢卡斯定理+高维前缀和)

    卢卡斯定理 题目中说到\(p\)是质数. 而此时要求组合数向质数取模的结果,就可以用卢卡斯定理: \[C_x^y=C_{x\ div\ p}^{y\ div\ p}\cdot C_{x\ mod\ p ...

  2. 【2019.8.6 慈溪模拟赛 T2】树上路径(tree)(Trie)

    从暴力考虑转化题意 考虑最暴力的做法,我们枚举路径的两端,然后采用类似求树上路径长度的做法,计算两点到根的贡献,然后除去\(LCA\)到根的贡献两次. 即,设\(v_i\)为\(i\)到根路径上的边权 ...

  3. 【2019.8.8 慈溪模拟赛 T2】query(query)(分治+分类讨论)

    分治 首先,我们考虑分治处理此问题. 每次处理区间\([l,r]\)时,我们先处理完\([l,mid]\)和\([mid+1,r]\)两个区间的答案,然后我们再考虑计算左区间与右区间之间的答案. 处理 ...

  4. 【2019.8.9 慈溪模拟赛 T2】摘Galo(b)(树上背包)

    树上背包 这应该是一道树上背包裸题吧. 众所周知,树上背包的朴素\(DP\)是\(O(nm^2)\)的. 但对于这种体积全为\(1\)的树上背包,我们可以通过记\(Size\)优化转移时的循环上界,做 ...

  5. 【2019.8.12 慈溪模拟赛 T2】汪哥图(wang)(前缀和)

    森林 考虑到题目中给出条件两点间至多只有一条路径. 就可以发现,这是一个森林. 而森林有一个很有用的性质. 考虑对于一棵树,点数-边数=\(1\). 因此对于一个森林,点数-边数=连通块个数. 所以, ...

  6. 【2019.8.14 慈溪模拟赛 T2】黑心老板(gamble)(2-SAT)

    \(2-SAT\) 考虑每个点只能选择\(R\)或\(B\),可以看作选\(0\)或\(1\). 然后对于给出的关系式,若其中一个位置满足关系式,另两个位置就必须不满足关系式,这样就可以对于每个关系式 ...

  7. 【2019.8.11上午 慈溪模拟赛 T2】十七公斤重的文明(seventeen)(奇偶性讨论+动态规划)

    题意转化 考虑我们对于集合中每一个\(i\),若\(i-2,i+k\)存在,就向其连边. 那么,一个合法的集合就需要满足,不会存在环. 这样问题转化到了图上,就变得具体了许多,也就更容易考虑.求解了. ...

  8. 【2019.8.11下午 慈溪模拟赛 T2】数数(gcd)(分块+枚举因数)

    莫比乌斯反演 考虑先推式子: \[\sum_{i=l}^r[gcd(a_i,G)=1]\] \[\sum_{i=l}^r\sum_{p|a_i,p|G}\mu(p)\] \[\sum_{p|G}\mu ...

  9. 【2019.8.15 慈溪模拟赛 T1】插头(plugin)(二分+贪心)

    二分 首先,可以发现,最后的答案显然满足可二分性,因此我们可以二分答案. 然后,我们只要贪心,就可以验证了. 贪心 不难发现,肯定会优先选择能提供更多插座的排插,且在确定充电器个数的情况下,肯定选择能 ...

随机推荐

  1. 让你的网页"抖起来"?!?

    细心的小伙伴可能发现我的左下角有一个抖起来的小按钮,然后页面就开始皮了起来,哈哈好快乐啊 没有利用js,单独的使用了css3的动画就实现了这个效果 css设置 @keyframes shake-it{ ...

  2. "中国东信杯"广西大学第二届程序设计竞赛E Antinomy与红玉海(二分)

    题目大意: n个人,每个人想参加a[i]轮游戏,但每场游戏必须有个一个人当工具人 问最少有几场游戏 题解: 二分 答案范围:[0,sigma a[i]] check:首先a[i]>=ans,其次 ...

  3. java(二)变量

    基础数据类型: 数值型:整型(byte.short.int.long).浮点型(float.double)java各整数类型有固定的表数范围和字段长度,不受具体os的影响,以保持java的可移植性:j ...

  4. mysql中的replace

    replace字面意思是替换,在mysql里面的运用是 如下图所示 1.  replace into test values(6, 'wowowo', 'new', 'japan') 这条语句则他会正 ...

  5. 利用shell脚本快速定位日志

    我们平时查日志,在测试环境,日志文件只有几个的情况下,我们可以通过找时间接近的文件然后根据关键词定位报错位置,大不了都查一遍,这都可以忍受.但是在实际的生产环境下,服务器集群部署,每天的日志非常多非常 ...

  6. javascript的10个开发技巧

    总结10个提高开发效率的JavaScript开发技巧. 1.生成随机的uid. const genUid = () => { var length = 20; var soupLength = ...

  7. 数据库——SQL-SERVER练习(5) 供应关系

    以下题目用到工程供应数据库关系模式:供应商(供应商号,供应商名,城市)        S(Sno,Sname,City)零件(零件号,零件名,零件颜色)     P(Pno,Pname,Color)工 ...

  8. 如何将vim改造为python的IDE

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Jeffrey Wang PS:如有需要Python学习资料的小伙 ...

  9. Vue中v-on的指令以及一些其他指令

    1.v-on的基本使用 <div id="app"> <!-- 使用事件绑定的简写形式 --> <input type="button&qu ...

  10. Shell(三):echo、printf、test命令

    一.echo 1.显示普通字符串: echo "today is a wonderful day" 这里的双引号可以省略. 2.显示转义字符: echo "\" ...