QZEZTEST2021.7.27分析
T1 qzez 错误检测
题意
思路
代码
T2 qzez 比赛
题意
题面
有\(AB\)两队,每队\(n\)人,两队间进行\(n\)场比赛,每个人都要参赛,对手随机且概率均等。每人都有一个实力值,若一场比赛中两队派出队员的能力值分别为\(A_i\)和\(B_j\),那么实力值高的一队能获得\((A_i-B_j)^2\)分。求所有情况中\(A\)队分值减\(B\)队分值的平均值(原题为“期望值”)。
输入格式
第一行一个数\(n\)表示两队的人数为\(n\)。
第二行\(n\)个数,第\(i\)个数\(A_i\)表示队伍\(A\)的第\(i\)个人的实力值。
第三行\(n\)个数,第\(i\)个数\(B_i\)表示队伍\(B\)的第\(i\)个人的实力值。
输出格式
输出仅包含一个实数表示\(A\)期望赢\(B\)多少分。答案保留到小数点后一位(注意精度)。
样例输入
2
3 7
1 5
样例输出
20.0
样例解释
有两种情况:
\(3-1,7-5\),此时\(A\)队赢\(8\)分。 \(3-5,7-1\),此时\(A\)队赢\(32\)分。 综上,平均值为\(20\)分。
思路
原题的“期望值”其实就是平均值,本题和概率论无关。
从样例中,我们不难发现,本题是要求\(\dfrac{ \sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} \pm(A_i-B_j)^2}{n}\)。展开完全平方公式,得到其实主要要求\(A_i^2+B_j^2-2A_iB_j\)。
分析对于每一个\(A_i\),要计算出\(\dfrac{\sum\limits_{j=1}^{n}{A_i^2+B_j^2-2A_iB_j}}{n}\),显然,把除以\(n\)放在最后输出的时候除会方便许多,那么式子就变成了\(\sum\limits_{j=1}^{n}{A_i^2+B_j^2-2A_iB_j}\),稍微变形一下就得到了\(n*A_i^2+\sum\limits_{j=1}^{n}B_j^2-2*A_i*\sum\limits_{j=1}^{n}{B_j}\)。显然,我们可以预处理出\(B\)的前缀和\(sp\)和前缀平方和\(pp\)(应该可以这么叫吧,即\(\sum\limits_{j=1}^{n}B_j^2\))。但是,我们还要注意到有\(\pm\)的存在。我们可以先对\(B\)排序(\(A\)无所谓),之后对于每个\(A_i\),二分(\(lower\)_\(bound\)即可)找到位置\(t\),使得\(A_i\ge B_t\)且\(A_i\le B_{t+1}\)即\(B_1\sim B_t\)\(A\)队赢,\(B_{t+1}\sim B_n\)\(A\)队输,即对于\(A_i\),我们的结果\(ans\)要加上\((t*A_i^2+\sum\limits_{j=1}^{t}{B_j^2}-2*A_i*\sum\limits_{j=1}^{t}{B_j})-((n-t)*A_i^2+\sum\limits_{j=t+1}^{n}{B_j^2}-2*A_i*\sum\limits_{j=t+1}^{n}{B_j})\),加上前缀和和前缀平方和得到最终结果:
\]
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxn 50005
#define ll long long
using namespace std;
ll n;
ll a[maxn],b[maxn];
ll sp[maxn],pp[maxn];
ll ansp,ansn,ans;
int main(){
scanf("%d",&n);
for(ll i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(ll i=1;i<=n;i++){
scanf("%d",&b[i]);
}
sort(a+1,a+1+n);
sort(b+1,b+1+n);
for(ll i=1;i<=n;i++){
sp[i]=sp[i-1]+b[i];
pp[i]=pp[i-1]+b[i]*b[i];
}
for(ll i=1;i<=n;i++){
ll t=lower_bound(b+1,b+1+n,a[i])-b-1;
ansp=a[i]*a[i]*t+pp[t]-2*a[i]*sp[t];
ansn=a[i]*a[i]*(n-t)+(pp[n]-pp[t])-2*a[i]*(sp[n]-sp[t]);
ans+=(ansp-ansn);
}
printf("%.1lf",(double)ans/n);
return 0;
}
T3 qzez Devoirs de maths
题意
思路
代码
T4 qzez 序列切割
题意
题面
有一长度为\(n\)的序列\(a\),要求分成\(k\)段,使得每段两端数字不互质,求最小的\(k\)值。
输入格式
第一行\(n\)
第二行空格隔开的\(n\)个数字,\(a_i\)表示第\(i\)个数字
输出格式
最少的切割个数\(k\)
样例输入
6
2 3 3 4 3 3
样例输出
2
样例解释
分成2 3 3 4$/$3 3两段,显然不唯一。
思路
显然此题为划分型\(DP\),我们设\(f_i\)为划分\(1\sim i\)可以得到的最小段数,由此可推出方程式\(f_i=\min\limits_{j=1,\gcd(i,j)>1}^{i}{f_j}+1\),就是说,把\(i,j\)划为一段,\(f_i\)等于\(f_j\)(即\(j\)之前的最佳方案)加\(i,j\)这一段(加一)。
暴力显然过不去,我们要考虑优化。发现每次寻找符合条件的所有\(j\)会浪费太多时间,所以我们注意到,只有有至少一个相同质因数的两个数才不互质,所以,对于每一个\(a_i\),我们只需要找到它的全部质因数,找到前面与它有至少一个相同质因数的数当作\(j\)就可以了。但是,这样找还是时间太长,我们不妨设\(g_i\)为有质因数\(i\)的数的最小\(f\)值,即对于所有有质因数\(i\)的数\(x\),\(g_i=min(f_x)\),这样,式子就变成了\(f_i=\min\limits_{j=prime_i}{g_j}+1\)(\(prime\)数组存全部除\(1\)以外的质因数)。
下面考虑\(g\)数组的更新,若现在的\(i\)自己成一段,\(g_{prime_i}=\min(g_{prime_i},f_{i-1})\),若\(i\)和其它一段,就不用更新了。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1000005
using namespace std;
int n;
int a[maxn];
int f[maxn],g[maxn];
int t=0,prime[maxn];
void findprime(int x){
t=0;
prime[++t]=x;
for(int i=2;i*i<=x;i++){
if(x%i==0){
prime[++t]=i;
prime[++t]=x/i;
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
memset(f,0x3f,sizeof(f));
memset(g,0x3f,sizeof(g));
f[0]=g[0]=0;
for(int i=1;i<=n;i++){
findprime(a[i]);
f[i]=f[i-1];
for(int j=1;j<=t;j++){
f[i]=min(f[i],g[prime[j]]);
}
f[i]++;
for(int j=1;j<=t;j++){
g[prime[j]]=min(g[prime[j]],f[i-1]);
}
}
printf("%d",f[n]);
return 0;
}
/*
6
2 3 3 4 3 3
*/
QZEZTEST2021.7.27分析的更多相关文章
- mysql-5.6.27源码安装及错误解决办法
wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.27.tar.gz yum install -y cmake 当然也可以自己下载源码包安 ...
- linux篇-linux mysql5.6.27源码安装和错误解决
centos mysql5.6.27 1编译安装 先进入到文件放置的路径下 创建一个个文件 #mkdir–p /data/mysql/mysql #mkdir–p /data/mysql/mysqld ...
- .net面试(汇总2)
c#继承: base 表示当前对象基类的实例(使用base关键字可以调用基类的成员)this表示当前类的实例 在静态方法中不可以使用base和this关键字 派生类会继承基类所有的成员但是构造函数和 ...
- 经典.net面试题目
1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保 ...
- net面试题
简述 private. protected. public. internal 修饰符的访问权限.答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...
- .net面试题集锦
1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...
- javascript运算符——位运算符
× 目录 [1]二进制 [2]非 [3]与[4]或[5]异或[6]左移[7]右移[8]>>>[9]应用 前面的话 位运算符是非常底层的运算,由于其很不直观,所以并不常用.但是,其速度 ...
- USACO3.1Humble Numbers[...]
题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包括,p1.p1*p2.p1*p1.p1*p2*p3. ...
- 经典.net试题
经典.net面试题目 1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. pr ...
随机推荐
- 5shell中的数组
0.理解数组 (1)shell不限制数组的大小,数组元素的下标从0开始计数 (2)获取数组中的元素要使用下标[ ],下标可以是一个整数,也可以是一个结果为整数的表达式,但是下标必须大于等于0 (3)b ...
- Linux环境Nginx安装、调试以及PHP安装(转)
linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5 1.编译安装Nginx 官网:http://wiki.nginx.org/Install ...
- CG-CTF Our 16bit Games
一.放到xp上面跑,发现是一个图形界面的飞机游戏...估计是分数到达多少,然后就可以输出flag. 打开ida,一脸懵逼,主要这玩意16位,我直接静态调试了 发现很多汇编代码,有点懵逼,在最下方的地方 ...
- cke编辑器插入&ZeroWidthSpace占位字符的问题记录
背景 本博文主要记录在使用cke编辑器时,遇到的一系列的问题 问题1:在执行某些业务操作后,编辑器会偶现在页面头部或者尾部插入&ZeroWidthSpace占位符(编辑器好像就爱干这事~) 解 ...
- 攻防世界-crypto-Decrypt-the-Message(Poem Codes-诗歌密码)
题目来源:su-ctf-quals-2014题目描述:解密这段信息! 下载附件,内容如下 The life that I have Is all that I have And the life th ...
- PYTHON matplotlib入门
'''作为线性图的替代,可以通过向 plot() 函数添加格式字符串来显示离散值. 可以使用以下格式化字符. 字符 描述 '-' 实线样式 '--' 短横线样式 '-.' 点划线样式 ':' 虚线样式 ...
- 高校表白App-团队冲刺第五天
今天要做什么 封装Adapter制作引导页 今天做了什么 成功封装工具类,为以后的轮播做了铺垫 遇到的问题 在封装时采用数组容器进行操作,只能添加图片作为元素,对于layout不可加入
- AgileTC linux部署
简介 AgileTC是一套敏捷的测试用例管理平台,支持测试用例管理.执行计划管理.进度计算.多人实时协同等能力,方便测试人员对用例进行管理和沉淀.产品以脑图方式编辑可快速上手,用例关联需求形成流程闭环 ...
- 一文读懂k8s rbac 权限验证
自我认为的k8s三大难点:权限验证,覆盖网络,各种证书. 今天就说一下我所理解的权限验证rbac. 咱不说rbac0,rbac1,rbac2,rbac3.咱就说怎么控制权限就行. 一.前言 1,反正R ...
- 【Mysql】一个简易的索引方案
一.没有索引的时候如何查找 先忽略掉索引这个概念,如果现在直接要查某条记录,要如何查找呢? 在一个页中查找 如果表中的记录很少,一个页就够放,那么这时候有 2 种情况: 用主键为搜索条件:这时就是之前 ...