「AGC020F」 Arcs on a Circle

Link

这个题非常 Amazing 啊。果然AtCoder全是智商题

首先你可以注意到数据范围真的是小得离谱,让你想要爆搜。

然后你发现不可做,那考虑状压。

首先你发现这是一个环很烦,所以我们随便找一个端点断环为链。

问题转换为求能覆盖整个圆的不同的覆盖方式。

但是显然这样的方案有无数种,我们需要考虑优化。

注意到两段圆弧是否相交,仅与它们的起始位置的整数部分的值和小数部分有关。更进一步地,他们小数部分的相对大小决定了其是否相交。

若有 \(p_i\le p_j\),则两圆弧相交 \(\iff p_i+l_i\ge p_j\)。

拆分为整数和小数部分,有 \([p_i]+\{p_i\}+l_i\ge [p_j]+\{p_j\}\)。

若 \([p_i]+l_i\neq [p_j]\),则小数部分无影响。

若 \([p_i]+l_i= [p_j]\),则 \([p_i]+\{p_i\}+l_i\ge [p_j]+\{p_j\}\iff \{p_i\}\ge \{p_j\}\)。

不妨设相对位置互不相同。

于是我们可以考虑枚举所有圆弧小数部分的相对位置,然后状压DP即可。

/*---Author:HenryHuang---*/
/*---Never Settle---*/
#include<bits/stdc++.h>
using namespace std;
int s;
int a[10],tot;
long long ans;
int n,c;
int f[50][500];
int solve(){
memset(f,0,sizeof f); f[0][a[n]*(n+1)]=1;
for(int i=1;i<(n+1)*c;++i){
if(i%(n+1)){
int t=i%(n+1)-1,len=min(i+(n+1)*a[t],(n+1)*c);
for(int j=0;j<=s;++j){
if((j&(1<<t))==0){
for(int k=i;k<=(n+1)*c;++k)
f[j|(1<<t)][max(k,len)]+=f[j][k];
}
}
}
}
return f[s][(n+1)*c];
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>c;
s=(1<<(n-1))-1;--n;
for(int i=0;i<=n;++i) cin>>a[i];
sort(a,a+n+1);
do{
ans+=solve();
++tot;
}while(next_permutation(a,a+n));
cout<<setprecision(14)<<fixed<<(long double)ans/tot/pow(c,n)<<'\n';
return 0;
}

「AGC020F」 Arcs on a Circle的更多相关文章

  1. 「MoreThanJava」Day 7:接口详解

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  2. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  3. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  4. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  5. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  6. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  7. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  8. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  9. 「2014-3-17」C pointer again …

    记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...

随机推荐

  1. .Net RabbitMQ实战指南——RabbitMQ相关概念介绍

    什么是消息中间件 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串.JSON等,也可以很复杂,比如内嵌对象. 消息队列中间件(Message Queue Middl ...

  2. Camera噪声问题

    Camera噪声问题 Camera RGB 域的噪声 以上部分属于sensor processing,接下来的部分属于color.luminance processing. gamma gamma是在 ...

  3. mybatis学习——映射器(mappers)

    在定义 SQL 映射语句之前,我们需要告诉 MyBatis 到哪里去找到这些语句. 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射 ...

  4. 九、部署audit监控文件

    审计的目的是基于事先配置的规则生成日志,记录可能发生在系统上的事件(正常或非正常行为的事件),审计不会为系统提供额外的安全保护,但她会发现并记录违反安全策略的人及其对应的行为. 审计能够记录的日志内容 ...

  5. windows 7系统安装与配置Tomcat服务器环境

    windows 7系统安装与配置Tomcat服务器环境 学习了一个月的java基础,终于要迈向java web领域.学习java web开发就离不开服务器的支持,由于本人是菜鸟,只好求助度娘谷哥.在此 ...

  6. 【接口测试】-1.常用的接口测试工具(Postman、soupUI、Jemeter)

      1)  Postman 1.get/post请求--  postman获取用户信息1 get方式:可以直接在url中写入参数 Post方式:请求体可以写到URL或Body的form-data中写参 ...

  7. spring boot使用@Async异步注解

    1.java的大部分接口的方法都是串行执行的,但是有些业务场景是不需要同步返回结果的,可以把结果直接返回,具体业务异步执行,也有些业务接口是需要并行获取数据,最后把数据聚合在统一返回给前端. 通常我们 ...

  8. 【模板】Tarjian求LCA

    概念 公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点 举个例子吧,如下图所示4和5的最近公共祖先是2,5和3的最近公共祖先是1,2和1的最近公共祖先是1. 算法 常用的求LCA的算法有:Ta ...

  9. Linux关闭打开防火墙命令

    Linux下打开和关闭防火墙 1.及时生效,重启后复原 关闭:service iptables stop  开启:service iptalbes start  查看状态:service iptabl ...

  10. ES6中的Module与Interator

    小编今天在用Vue做项目的时候,发现组件中有import和export,刚好今天看到相关的语法介绍和一些实例,下面小编就和大家一起进步.对于模块化规范,在es6出现之前,有以下三种规范,分别是Comm ...