[gym102511K]Traffic Blights
为了方便,对于集合$S$,称$k\equiv S(mod\ M)$当且仅当存在$x\in S$使得$k\equiv x(mod\ M)$
枚举红绿灯,对每一个点即限制$k$对$g_{i}+r_{i}$取模后的结果,同时相邻两个红绿灯限制相差是$o(1)$的,即可以提取出以下这个模型——
$n$次操作,每次操作给定$M$和$S\subseteq [0,M)$,新增限制$k\not\equiv S(mod\ M)$
每次操作后,求随机整数$k$满足当前所有限制的概率
数据范围为$1\le n\le 500$,$1\le M\le 100$
令$X=2^{3}\times 3^{2}\times 5\times 7$,那么$\forall 1\le M\le 100,\frac{M}{\gcd(M,X)}$为一个素数的幂次或1
枚举随机整数$k$对$X$取模的余数$a$($0\le a<X$),求出在满足给定限制下还满足$k\equiv a(mod\ X)$的概率,将这些概率累加即为答案
令$k=a+tX$,问题即变为对于随机整数$t$,$a+tX$满足所有限制的概率,代入后限制$k\not\equiv S(mod\ M)$即可转换为$\frac{X}{g}t\not\equiv S'(mod\ \frac{M}{g})$
(其中$g=\gcd(M,X)$,$S'=\{\frac{x}{g}\mid (g\mid x)\and (x+a\equiv S(mod\ M))\}$)
由于$\gcd(\frac{M}{g},\frac{X}{g})=1$,再令$S'$所有元素乘上$\frac{X}{g}$在模$\frac{M}{g}$意义下的逆元,即$t\not\equiv S'(mod\ \frac{M}{g})$
根据$X$的性质,$\frac{M}{g}$必然是素数的幂次或1,假设是$p$的幂次,不妨转换为$p^{\lfloor\log_{p}100\rfloor-ord_{p}(X)}$,此时相同素数的幂次必然都相同,直接对$S'$求并即可
(从同余的角度更容易理解此过程,但不同余方便实现)
最终,模数两两互素,每一个概率相乘即为答案
时间复杂度每一次都需要$o(MX)$去转化这个限制,总复杂度即$o(nMX)$,可以通过


1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 105
4 #define X 2520
5 struct del{
6 int i,P,x;
7 };
8 vector<int>v;
9 vector<del>v_del;
10 int n,x,r,g,p[N],visp[N],phi[N],tot[X][N],vis[X][N][N];
11 double ans;
12 int gcd(int x,int y){
13 if (!y)return x;
14 return gcd(y,x%y);
15 }
16 int pow(int n,int m,int mod){
17 int s=n,ans=1;
18 while (m){
19 if (m&1)ans=ans*s%mod;
20 s=s*s%mod;
21 m>>=1;
22 }
23 return ans;
24 }
25 void add(int p,int m,vector<int>v){
26 int g=gcd(m,X),mm=m/g,P=mm,inv=pow(X/g,phi[mm]-1,mm);
27 if (P%2==0)P=8;
28 if (P%3==0)P=9;
29 for(int i=0;i<X;i++)
30 for(int j=0;j<v.size();j++){
31 int x=(v[j]-i%m+m)%m;
32 if (x%g)continue;
33 x=x/g*inv%mm;
34 for(int k=0;k<P/mm;k++)
35 if (!vis[i][P][k*mm+x]){
36 tot[i][P]++;
37 vis[i][P][k*mm+x]=1;
38 if (p)v_del.push_back(del{i,P,k*mm+x});
39 }
40 }
41 ans=0;
42 for(int i=0;i<X;i++){
43 double s=1;
44 for(int j=1;j<=100;j++)s*=1.0*(j-tot[i][j])/j;
45 ans+=s;
46 }
47 while (v_del.size()){
48 del o=v_del.back();
49 tot[o.i][o.P]--;
50 vis[o.i][o.P][o.x]=0;
51 v_del.pop_back();
52 }
53 }
54 int main(){
55 phi[1]=1;
56 for(int i=2;i<N;i++){
57 if (!visp[i]){
58 p[++p[0]]=i;
59 phi[i]=i-1;
60 }
61 for(int j=1;(j<=p[0])&&(i*p[j]<N);j++){
62 visp[i*p[j]]=1;
63 if (i%p[j])phi[i*p[j]]=phi[i]*phi[p[j]];
64 else{
65 phi[i*p[j]]=phi[i]*p[j];
66 break;
67 }
68 }
69 }
70 scanf("%d",&n);
71 for(int i=1;i<=n;i++){
72 scanf("%d%d%d",&x,&r,&g);
73 v.clear();
74 for(int j=0;j<r+g;j++)
75 if ((j+x)%(r+g)>=r)v.push_back(j);
76 add(1,r+g,v);
77 printf("%.9f\n",ans/X);
78 v.clear();
79 for(int j=0;j<r+g;j++)
80 if ((j+x)%(r+g)<r)v.push_back(j);
81 add(0,r+g,v);
82 }
83 printf("%.9f",ans/X);
84 }
[gym102511K]Traffic Blights的更多相关文章
- ICPC World Finals 2019 题解
[A]Azulejos 题意简述: 有两排瓷砖,每排都有 \(n\) 个,每个瓷砖有高度 \(h_i\) 和价格 \(p_i\) 两种属性. 你需要分别重新排列这两排瓷砖,使得同一排的瓷砖满足价格不降 ...
- ZJOI2019Round#2
乱听课记录 关于树的分治问题&杂题选讲 张哲宇 边分治 (边分不是很鸡肋吗) 例题一 题目大意:给出两颗有正负边权的树,求出两个点\(u,v\)使得两棵树中\((u,v)\)距离的和最大. ...
- Linux下按程序查实时流量 network traffic
实然看到下载速度多达几M/s,但实际上并没有什么占用带宽的进程. 相查看每个程序占用的网络流量, 但系统自带的 System Monitor 只能查看全局的流量, 不能具体看某个程序的...... k ...
- Windows Azure Traffic Manager (5) Traffic Manager Overview
<Windows Azure Platform 系列文章目录> 笔者默默地看了一下之前写的Traffic Manager内容,已经差不多是3年前的文章了.现在Azure Traffic M ...
- Windows Azure Traffic Manager (6) 使用Traffic Manager,实现本地应用+云端应用的高可用
<Windows Azure Platform 系列文章目录> 注意:本文介绍的是使用国内由世纪互联运维的Azure China服务. 以前的Traffic Manager,背后的Serv ...
- 流量工程 traffic engineering (TE)
什么是流量工程 流量工程是指根据各种数据业务流量的特性选取传输路径的处理过程.流量工程用于平衡网络中的不同交换机.路由器以及链路之间的负载. [编辑] 流量工程的内容 流量工程在复杂的网络环境中,控制 ...
- snmp switch traffic交换机带宽
上代码 <?php function getstr1($strall,$str1,$str2,$html_charset='utf-8'){ $i1=mb_strpos($strall,$str ...
- 每日英语:The Secret About Online Ad Traffic: One-Third Is Bogus
Billions of dollars are flowing into online advertising. But marketers also are confronting an uncom ...
- Traffic Lights
Traffic Lights time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
随机推荐
- 如何用redis统计海量UV?
前言 我们先思考一个常见的业务问题:如果你负责开发维护一个大型的网站,有一天老板找产品经理要网站每个网页每天的 UV 数据,然后让你来开发这个统计模块,你会如何实现? 统计uv的常用方法以及优缺点 其 ...
- 专访阿里云 Serverless 负责人:无服务器不会让后端失业
2012 年,云基础设施服务提供商 Iron.io 的副总裁 Ken 谈到软件开发行业的未来,首次提出了 Serverless 的概念,为云中运行的应用程序描述了一种全新的系统体系架构.此后,以 AW ...
- 【分享】 一款自用的Anki卡片模板:黄子涵单词卡片 v1
[分享] 一款自用的Anki卡片模板:黄子涵单词卡片 v1 说明 第一代的功能 主要有两部分组成:英文和含义,目前主要是为自己记忆Web前端一些常用的单词而服务 有美美哒背景图,本来想修改为随机背景图 ...
- C 可变参数列表 stdarg.h
内容来自<c和指针>,整理后方便个人理解 stdarg.h 菜鸟教程 - <stdarg.h> 类型 va_list 宏 va_start va_arg va_end #inc ...
- 3.3 Execution Flow of a DDD Based Application 基于DDD的应用程序执行流程
3.3 Execution Flow of a DDD Based Application 基于DDD的应用程序执行流程 The figure below shows a typical reques ...
- 极速上手 VUE 3 —— teleport传送门组件
一.teleport 介绍 teleport 传送门组件,提供一种简洁的方式,可以指定它里面的内容的父元素.通俗易懂地讲,就是 teleport 中的内容允许我们控制在任意的DOM中,使用简单. 使用 ...
- [技术博客] 软工-Ruby on Rails 后端开发总结分享
[技术博客] 软工-Ruby on Rails 后端开发总结分享 在这次软件编写中,我们的后端使用了Ruby on Rails (RoR)框架. Rails框架是用Ruby编写的.这意味着当我们为Ru ...
- elasticsearch的bulk(批量)操作
在es中我们可能会有这么一种需求,即有时需要批量向es中插入或更新或删除数据,如果一条一条数据的操作,那么速度必然很慢,那么es的bulk api就可以派上用场. delete 删除操作,只需要写一个 ...
- [BZOJ3307] 雨天的尾巴-----------------线段树进阶
虽然是个板子,但用到了差分思想. Description N个点,形成一个树状结构.有M次发放,每次选择两个点x,y对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成所有发放后,每个点存放最 ...
- Java 16 新功能介绍
点赞再看,动力无限.Hello world : ) 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 程序猿阿朗博客 已经收录,有很多知识点和系列文章. Ja ...