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})\),加上前缀和和前缀平方和得到最终结果:

\[(t*A_i^2+pp_t-2*A_i*sp_t)-((n-t)*A_i^2+(pp_n-pp_t)-2*A_i*(sp_n-sp_t))
\]

代码

#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分析的更多相关文章

  1. mysql-5.6.27源码安装及错误解决办法

    wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.27.tar.gz yum install -y cmake  当然也可以自己下载源码包安 ...

  2. linux篇-linux mysql5.6.27源码安装和错误解决

    centos mysql5.6.27 1编译安装 先进入到文件放置的路径下 创建一个个文件 #mkdir–p /data/mysql/mysql #mkdir–p /data/mysql/mysqld ...

  3. .net面试(汇总2)

    c#继承:  base 表示当前对象基类的实例(使用base关键字可以调用基类的成员)this表示当前类的实例 在静态方法中不可以使用base和this关键字 派生类会继承基类所有的成员但是构造函数和 ...

  4. 经典.net面试题目

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private :   私有成员, 在类的内部才可以访问. protected : 保 ...

  5. net面试题

    简述 private. protected. public. internal 修饰符的访问权限.答 . private :   私有成员, 在类的内部才可以访问.   protected : 保护成 ...

  6. .net面试题集锦

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...

  7. javascript运算符——位运算符

    × 目录 [1]二进制 [2]非 [3]与[4]或[5]异或[6]左移[7]右移[8]>>>[9]应用 前面的话 位运算符是非常底层的运算,由于其很不直观,所以并不常用.但是,其速度 ...

  8. USACO3.1Humble Numbers[...]

    题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包括,p1.p1*p2.p1*p1.p1*p2*p3. ...

  9. 经典.net试题

    经典.net面试题目 1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private :   私有成员, 在类的内部才可以访问. pr ...

随机推荐

  1. 安装eclipse及Helloworld体验

    准备工作 如果没有配置java环境变量的请移步:https://www.cnblogs.com/lhns/p/9638105.html 下载eclipse 网址:https://www.eclipse ...

  2. 26 bash shell中的信号

    当没有任何捕获时,一个交互式 Bash Shell 会忽略 SIGTERM(发送到进程的 TERM 信号用于要求进程终止) 和 SIGQUIT(当用户要求进程执行 core dump 时,QUIT 信 ...

  3. PE文件头格式解析

    前言: 昨天写了一题de1ctf的题,发现要脱壳,手脱之后发现要iat修复,我就发现自己在这块知识缺失了,win逆向,好像一直都是打ctf,然后用逆向方法论去肝的 其他方面倒是没有很深入学习,但实际上 ...

  4. 单选按钮(radio)的取值和点击事件

    笔记走一波:获取单选按钮(radio)的选中值,以及它的点击事件的实现 首先要引入Jquery <script type="text/javascript" src=&quo ...

  5. 小哈学python----一行代码输出特定字符"Love"拼成的心形

    print('\n'.join([''.join([('Love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2* ...

  6. python 读注册表 检测NET版本

    from winreg import * import re def subRegKey(key, pattern, patchlist): # 个数 count = QueryInfoKey(key ...

  7. 详解Lombok中的@Builder用法

    Builder 使用创建者模式又叫建造者模式.简单来说,就是一步步创建一个对象,它对用户屏蔽了里面构建的细节,但却可以精细地控制对象的构造过程. 基础使用 @Builder注释为你的类生成相对略微复杂 ...

  8. [001] - JavaSE面试题(一):面向对象

    第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [001] - JavaSE面试题(一):面向对象 第1问:面向对象和面向过程的区别? 面向过程 ...

  9. 一次搞懂JavaScript对象

    索引 目录 索引 1. 对象与类 2.对象使用 2.1 语法 2.2 属性 3.对象特性 4.对象的创建 4.1 字面量 4.2 工厂函数 4.3 构造函数 4.4 class类 4.5 对象与单例模 ...

  10. Bigdecimal用法

    一.简介 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更 ...