T1

题意:有 \(n\) 个点,有 \(m\) 条边,每次加入一条到图中

每个点的度数大于零且都是偶数的子图的个数

考试直接判断两点是否出现,出现则更新

其实只要改成并查集判断即可

原理:其实就是让你找环及其组合个数,

若两点原本相连,此时多一条边,则 \(ans\) 变为 \(2ans+1\)

这点不难。若删去任意一边,新的边与剩下的组成 \(ans\) 个环,这条边与新的边又有一个环

#include<bits/stdc++.h>
using namespace std;
const int N=200005,M=300005;
int n,m,fa[N];
long long ans;
int fnd(int x) {
while(fa[x]^x)x=fa[x]=fa[fa[x]];
return x;
}
int main() {
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1,u,v;i<=m;i++) {
scanf("%d%d",&u,&v);
u=fnd(u),v=fnd(v);
if(u^v)fa[u]=v;
else ans=(ans<<1|1)%1000000009;
printf("%lld\n",ans);
}
}

T2

有 \(n\times m\) 的方阵,有 \(T\) 个特殊点,两个相邻的点或首尾都可交换

问能不能使每行或每列的特殊点个数一样,

都可以一样输出 both ,只有行可以输出 row ,列可以输出 column ,不行输出 impossible

可以发现若 \(T\mod n=0\) 则行成立, \(T\mod m=0\) 则列可以。而且行和列互不干扰

还有一点:肯定是相邻两行互换,然后推到下一行

那么可以把行个数看成 \(n\) 堆纸牌,于是成了——环状均分纸牌

怎么做?设 \(b_i=a_i-\dfrac{T}{n},s_i=\sum_1^i b_i\)

那么从 \(k\) 开始推,\(i\) 到 \(i+1\) 的答案就是 \(|s_i-s_k|\) 总代价是 \(\sum_{i=1}^n |s_i-s_k|\)

发现当 \(s_k\) 为中位数时最小,所以排序,然后 \(s_k=s_{mid}\) 算答案即可

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=100005;
int n,m,T,x[N],y[N],mi;
LL t[N],s[N],ans;
void mer(int l,int r) {
if(l>=r)return;
register int mid=l+r>>1,i=l,j=mid+1,k=l-1;
mer(l,mid),mer(mid+1,r);
for(;i<=mid && j<=r;)
if(s[i]<s[j])t[++k]=s[i++];
else t[++k]=s[j++];
for(;i<=mid;)t[++k]=s[i++];
for(;j<=r;)t[++k]=s[j++];
for(int C=l;C<=r;C++)s[C]=t[C];
}
int main() {
scanf("%d%d%d",&n,&m,&T);
if(T%n==0&&T%m==0)printf("both ");
else if(T%n==0)printf("row ");
else if(T%m==0)printf("column ");
else return printf("impossible"),0;
for(int i=1,a,b;i<=T;i++)
scanf("%d%d",&a,&b),x[a]++,y[b]++;
if(T%n==0) {
for(int i=1;i<=n;i++)s[i]=s[i-1]+x[i]-T/n;
mer(1,n),mi=n+1>>1;
for(int i=1;i<=n;i++)ans+=abs(s[i]-s[n+1>>1]);
}
if(T%m==0) {
for(int i=1;i<=m;i++)s[i]=s[i-1]+y[i]-T/m;
mer(1,m);
for(int i=1;i<=m;i++)ans+=abs(s[i]-s[m+1>>1]);
}
printf("%lld",ans);
}

T3

题意:构造一个最长的 01 串使得形成的环中从任意一点顺时针 \(k\) 个连起来的数互不相同

搜索+剪枝,没了

T4

题意:有 \(n\) 个挑战,第 \(i\) 个挑战胜利的百分比是 \(p_i\) ,其类型为 \(a_i\)

若 \(a_i=-1\) 赢了会得到挂件,消耗 1 空间;若 \(a_i\ge0\) 则赢了获得 \(a_i\) 的空间

初始有 \(K\) 空间,必须赢 \(L\) 局才能结束,问能结束且获得所有挂件的概率

设 \(f_{i,j,k}\) 为到第 \(i\) 场比赛空间为 \(j\) 赢了 \(k\) 局的概率

发现其实挂件最多 \(n\) 个,空间超过 \(n\) 就没用了,空间问题解决了

然后按照 \(a\) 排序,保证最后的空间 \(\ge 0\) 。

最后转移, \(f_{i,j,k}=f_{i-1,j-a_i,k-1}\times p_i+f_{i-1,j,k}\times(1-p_i)\)

其实就是赢得概率和输的概率之和

答案是 \(\sum_j\sum_{k=L}^n f_{n,j,k}\)

#include<bits/stdc++.h>
using namespace std;
typedef double db;
const int N=205;
int n,L,K,x[N],xp;
db p[N],f[N][205][N],ans;
void sor(int l,int r) {
register int i=l,j=r,mid=x[l+r>>1];
while(i<=j) {
while(x[i]>mid)i++;
while(x[j]<mid)j--;
if(i<=j) {
swap(x[i],x[j]);
swap(p[i],p[j]);
i++,j--;
}
}
if(i<r)sor(i,r);
if(j>l)sor(l,j);
}
int main() {
scanf("%d%d%d",&n,&L,&K);
for(int i=1;i<=n;i++)scanf("%lf",&p[i]),p[i]/=100.0;
for(int i=1;i<=n;i++)scanf("%d",&x[i]),xp+=(x[i]<0);
f[0][K][0]=1;
sor(1,n);
for(int i=1;i<=n;i++) {
for(int j=0;j<=200;j++) {
for(int k=0;k<=n;k++) {
f[i][j][k]=f[i-1][j][k]*(1-p[i]);
if(k && j-x[i]>=0)f[i][j][k]+=f[i-1][min(200,j-x[i])][k-1]*p[i];
}
}
}
for(int i=0;i<=200;i++)
for(int j=L;j<=n;j++)ans+=f[n][i][j];
printf("%.6lf",ans);
}

总结

T1:深入思考

T2:环状均分纸牌

T3:暴力别打炸

T4:概率 dp 不要慌

2021.06.19【NOIP提高B组】模拟 总结的更多相关文章

  1. 5820. 【NOIP提高A组模拟2018.8.16】 非法输入(模拟,字符串)

    5820. [NOIP提高A组模拟2018.8.16] 非法输入 (File IO): input:aplusb.in output:aplusb.out Time Limits: 1000 ms   ...

  2. JZOJ 5818. 【NOIP提高A组模拟2018.8.15】 做运动

    5818. [NOIP提高A组模拟2018.8.15] 做运动 (File IO): input:running.in output:running.out Time Limits: 2000 ms  ...

  3. JZOJ 5812. 【NOIP提高A组模拟2018.8.14】 区间

    5812. [NOIP提高A组模拟2018.8.14] 区间 (File IO): input:range.in output:range.out Time Limits: 1000 ms  Memo ...

  4. 2021.03.06【NOIP提高B组】模拟 总结

    T1 看起来十分复杂,打表后发现答案是 \(n*m\mod p\) 具体的证明... 原式的物理意义,就是从坐标原点(0,0),用每一种合法的斜率, 穿过坐标[1 ~ n , 1 ~ m]的方阵中的整 ...

  5. [JZOJ5817] 【NOIP提高A组模拟2018.8.15】 抄代码

    Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...

  6. [JZOJ5818] 【NOIP提高A组模拟2018.8.15】 做运动

    Description 一天,Y 君在测量体重的时候惊讶的发现,由于常年坐在电脑前认真学习,她的体重有了突 飞猛进的增长. 幸好 Y 君现在退役了,她有大量的时间来做运动,她决定每天从教学楼跑到食堂来 ...

  7. 【NOIP提高A组模拟2018.8.14】 区间

    区间加:差分数组修改 O(n)扫描,负数位置单调不减 #include<iostream> #include<cstring> #include<cstdio> # ...

  8. [jzoj 5782]【NOIP提高A组模拟2018.8.8】 城市猎人 (并查集按秩合并+复杂度分析)

    传送门 Description 有n个城市,标号为1到n,修建道路花费m天,第i天时,若gcd(a,b)=m-i+1,则标号为a的城市和标号为b的城市会建好一条直接相连的道路,有多次询问,每次询问某两 ...

  9. [jzoj 5781]【NOIP提高A组模拟2018.8.8】秘密通道 (最短路)

    传送门 Description 有一副nm的地图,有nm块地,每块是下列四种中的一种: 墙:用#表示,墙有4个面,分别是前面,后面,左面,右面. 起点:用C表示,为主角的起点,是一片空地. 终点:用F ...

  10. [jzoj 5778]【NOIP提高A组模拟2018.8.8】没有硝烟的战争 (博弈论+dp)

    传送门 Description 被污染的灰灰草原上有羊和狼.有N只动物围成一圈,每只动物是羊或狼. 该游戏从其中的一只动物开始,报出[1,K]区间的整数,若上一只动物报出的数是x,下一只动物可以报[x ...

随机推荐

  1. ES7中前端异步特性:async、await。

    在最新的ES7(ES2017)中提出的前端异步特性:async.await. 什么是async.await? async顾名思义是"异步"的意思,async用于声明一个函数是异步的 ...

  2. macos停止MySQL服务

    1.命令行中 使用 find /usr  -name mysql 查找自己电脑中MySQL的安装位置 例如我查找到我电脑MySQL安装位置是 /usr/local/Cellar/mysql@5.6/5 ...

  3. paramterType和resultType的区别

    resultType是sql语句查询结果集的封装类型,也就是说把sql查询的结果封装在bean里返回回去,是存数据用的. paramType是从传过来的Bean中取数据放进例如insert语句的val ...

  4. Go 1.18泛型的局限性初探

    前言 Go 1.18 版本之后正式引入泛型,它被称作类型参数(type parameters),本文初步介绍 Go 中泛型的使用.长期以来 go 都没有泛型的概念,只有接口 interface 偶尔类 ...

  5. ORM中聚合函数、分组查询、Django开启事务、ORM中常用字段及参数、数据库查询优化

    聚合函数 名称 作用 Max() 最大值 Min() 最小值 Sum() 求和 Count() 计数 Avg() 平均值 关键字: aggregate 聚合查询通常都是配合分组一起使用的 关于数据库的 ...

  6. Django中间件、csrf跨站请求、csrf装饰器、基于django中间件学习编程思想

    django中间件 中间件介绍 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出. ...

  7. Go xmas2020 学习笔记 11、io.Reader

    11-Homework #2. 11-Reader. Reader interface. NewReader func. Reader Struct. Len .Size,Read func. Pra ...

  8. Python 速通爆肝、列表推导式、生成器、装饰器、生命游戏

    列表推导式.赋值.切片(替换.插入).字符串处理与判断.enumerate().格式化字符串.读写文件.global 关键字.字符串startswith().类与对象.生成器.装饰器.Self.*ar ...

  9. Vue基础开发入门之简单语法知识梳理(思维导图详解)

    基于个人写的以下关于Vue框架基础学习的三篇随笔,在此基础上,做一个阶段性的知识总结,以此来检验自己对Vue这一段时间学习的成果,内容不多,但很值得一看.(思维导图详解)

  10. JS加载不出来 必须alert才可以 alert另一种功能

    BEGIN; 今天在引入百度编辑器时,发现百度编辑器加载不出来. 代码是这样的: var editor = new baidu.editor.ui.Editor({    textarea: 'con ...