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 ...
随机推荐
- 其他:Spring5.0框架源码导入IDEA
1.下载Spring spring-framework-5.0.4.RELEASE下载地址:https://github.com/spring-projects/spring-framework/re ...
- yum的卸载和安装
安装精髓:报错就查,少包就按. 一.如果yum没有注册则需要卸载再安装第三方yum 1.卸载redhat的默认安装yum包 [root@dsl ~]#rpm –qa | grep yum [root@ ...
- mac-webui-selenium下的webdriver selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH
from selenium import webdriver def test1(): url='http://www.baidu.com' driver=webdriver.Chrome(" ...
- Sharding+SpringBoot+Mybatis 读写分离
基于Sharding JDBC的读写分离 1.引入pom.xml <dependencies> <!-- mybatis --> <dependency> < ...
- DL基础补全计划(三)---模型选择、欠拟合、过拟合
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- Spring boot+Mybatis+MySQL插入中文乱码
转载:https://www.jianshu.com/p/bd0311a33c16 现象: 搭建spring boot+mybatis+mysql时出现插入mysql的中文出现乱码???. mys ...
- 写了这么多年 CSS,initial 和 inherit 以及 unset 和 revert 还傻傻分不清楚?
经常会碰到,问一个 CSS 属性,例如 position 有多少取值. 通常的回答是 static.relative.absolute 和 fixed .当然,还有一个稍微生僻的 sticky .其实 ...
- 密码学系列之:Merkle–Damgård结构和长度延展攻击
密码学系列之:Merkle–Damgård结构和长度延展攻击 简介 Merkle–Damgård结构简称为MD结构,主要用在hash算法中抵御碰撞攻击.这个结构是一些优秀的hash算法,比如MD5,S ...
- 【spring源码系列】之【Bean的循环依赖】
希望之光永远向着目标清晰的人敞开. 1. 循环依赖概述 循环依赖通俗讲就是循环引用,指两个或两个以上对象的bean相互引用对方,A依赖于B,B依赖于A,最终形成一个闭环. Spring循环依赖的场景有 ...
- 流暢的pyhton4---數據庫備份
一.linux數據庫備份腳本 1.数据库备份,命令如下: ./pg_dump -h localhost -p 5432 -U postgres -W -F c -b -v -f "/opt/ ...