[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 ...
随机推荐
- webstorm 修改端口号
webstorm 修改端口号: 至此,点击下方 [apply],端口号修改完成.
- 鲲鹏展翅|SphereEx 获华为鲲鹏技术认证
SphereEx Data Middleware 通过了华为鲲鹏技术认证并加入鲲鹏展翅伙伴计划,未来 SphereEx Data Middleware 产品将继续以分布式能力为基础,以数据安全.分布式 ...
- std::sort 的注意事项
Luogu P1177 [模板]快速排序 \(\Large{AC}\) 代码: #include<bits/stdc++.h> using namespace std; int n,a[1 ...
- Golang/Java 实现无重复字符的最长子串 - LeetCode 算法
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-subs ...
- SimpleDateFormat、Date和String互转
今天在修改bug时遇到一个查询异常:根据时间段查询的时候,如果查询时间段含12点钟,那么能查到时间段之外的其他数据: 跟踪了数据流动发现,前同事写的程序中,有一处是讲前端传来时间字符串转为Date的一 ...
- java定时任务调度框架
java定时任务目前主要有三种: Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行,但不能在 ...
- anaconda+pytorch安装
环境配置说明: 因项目需要,需要写一个说明文档交付公司人员,指导其进行环境的安装 1. 安装 Anaconda 进入清华开源软件镜像站,其网址如下:https://mirrors.tuna.tsing ...
- [对对子队]会议记录4.15(Scrum Meeting 6)
今天已完成的工作 何瑞 工作内容:制作了合成指南 相关issue:实现游戏内UI界面使用的组件 马嘉 工作内容:基本实现了箱子内物品列表 相关issue:实现游戏内UI界面使用的组件 ...
- c++ get keyboard event
#include <string> #include <iostream> #include "windows.h" #include <conio. ...
- Typora和PicGo-Core搭配使用
作用:快速上传图片并获取图片 URL 链接的工具,图片存放到Gitee仓库中,在博客网站发布时不必担心图片转存失败问题 Gitee 创建一个新仓库 生成一个新令牌 生成后只显示一次,请妥善保管 Pic ...