\[\text{暑假集训CSP提高模拟}\int^{6}_{0}\frac{x^{2}}{6}dx
\]
关于这个东西怎么求的良心教程

含义:求出 \(f(x)=\frac{x^{2}}{6}\) 在区间 \([0,6]\) 内在 \(x\) 轴上方,\(f(x)\) 下方的图形面积.

解法:考虑到 “加速度变化面积等于速度变化量” 类似的思想,我们尝试构造一个 \(g(x)\) 使得 \(g'(x)=f(x)\),不难发现存在一个 \(g(x)=\frac{x^{3}}{18}\),这样我们就可以把求面积问题转化成求变化量问题,因此直接 \(g(6)-g(0)=12\)

非常好,你已经会积分了,现在来试试这个吧:

\[\int^{b}_{a}\frac{lnx\sin x}{x^3}dx
\]

A.黑客

显然这个题里只有 \(999\) 放在复杂度里是有可能对的,要么是 \(999^{2}\) 要么是 \(999^{2}\log 999\),显然应该是前者.

考虑枚举全部的最简分数,然后乘上去,算的时候直接算当前分母/分子是最简分式的几倍(注意上下取整的选择),然后在分子分母的可取值区间取一个交集即可.

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int p=1e9+7;
signed main(){
// freopen("T1.in","r",stdin);
// freopen("test.out","w",stdout);
int a,b,c,d,ans=0;
scanf("%lld %lld %lld %lld",&a,&b,&c,&d);
for(int i=1;i<=999;++i){
for(int j=1;j<=999-i;++j){
if(__gcd(i,j)==1){
int l1=ceil(a*1.0/i),l2=ceil(c*1.0/j);
int r1=floor(b*1.0/i),r2=floor(d*1.0/j);
ans=(((i+j)*max(0ll,(min(r1,r2)-max(l1,l2)+1))%p)+ans)%p;
// if(min(r1,r2)-max(l1,l2)>0)
// cout<<i<<" "<<j<<" "<<max(l1,l2)<<" "<<min(r1,r2)<<" "<<endl;
}
}
}
printf("%lld\n",ans);
}

B.密码技术

你说得对但是这题我做过

注意到交换具有传递性,对 \((1,2),(2,3)\) 可交换的情况,可以考虑如下交换方式得到 \((1,3)\) :

1    2    3    3
2 -> 1 -> 1 -> 2
3 3 2 1

多摸几组可以得到规律:这样的交换是有传递性的,每当我们想交换两个不能直接交换的元素,仅仅需要以中间元素作为中介分别交换即可.

因为这个题元素不重复(话说当时发现元素重复的这个题在同阶范围下是不可做的)因此行和列交换互不影响,直接乘法原理乘一下就行了. 对于每一个能互相交换的连通块,不妨用并查集维护大小 \(s\),对答案的贡献即为 \(A^{s}_{s}=s!\)

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,K;
int a[51][51];
const int p=998244353;
class dsu{
private:
int fa[51],size[51];
public:
void clear(){
for(int i=1;i<=n;++i){
fa[i]=i;
size[i]=1;
}
}
int find(int id){
if(id==fa[id]) return id;
fa[id]=find(fa[id]);
return fa[id];
}
void join(int x,int y){
int a=find(x),b=find(y);
if(a!=b){
fa[a]=b;
size[b]+=size[a];
size[a]=0;
}
}
bool isfa(int id){
return id==fa[id];
}
int get_size(int id){
return size[id];
}
};
dsu h,l;
int frac[51];
signed main(){
// freopen("T2.in","r",stdin);
frac[0]=1;
for(int i=1;i<=50;++i){
frac[i]=frac[i-1]*i%p;
}
scanf("%lld %lld",&n,&K);
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
scanf("%lld",&a[i][j]);
}
}
h.clear();l.clear();
for(int i=1;i<=n;++i){
for(int j=i+1;j<=n;++j){
bool flag=true;
for(int k=1;k<=n;++k){
if(a[i][k]+a[j][k]>K){
flag=false;break;
}
}
if(flag) h.join(i,j);
}
}
for(int i=1;i<=n;++i){
for(int j=i+1;j<=n;++j){
bool flag=true;
for(int k=1;k<=n;++k){
if(a[k][i]+a[k][j]>K){
flag=false;break;
}
}
if(flag) l.join(i,j);
}
}
int ans=1;
for(int i=1;i<=n;++i){
if(h.isfa(i)){
ans=ans*frac[h.get_size(i)]%p;
}
if(l.isfa(i)){
ans=ans*frac[l.get_size(i)]%p;
}
}
printf("%lld\n",ans);
}

C.修水管

暴力做法是显然的,写一个深搜暴力转移即可(其实能写状压的,我怎么老是忘了能状压)

#include<bits/stdc++.h>
using namespace std;
#define double long double
int n,r;
int w[251];
double p[251];
double dfs(int now,int brok,double nowp){
double res=0;
if(now>r){ return 0;}
if(nowp==0){ return 0;}
double zc=0;if(brok){ res+=w[brok];zc=p[brok];p[brok]=0;}
double nwp=1;
for(int i=1;i<=n;++i){
res+=dfs(now+1,i,nwp*p[i]);
nwp*=(1-p[i]);
}
res+=dfs(now+1,0,nwp);
if(brok){ p[brok]=zc;}
return res*nowp;
}
int main(){
int cases;cin>>cases;while(cases--){
cin>>n>>r;
for(int i=1;i<=n;++i){
cin>>p[i]>>w[i];
}
printf("%.10Lf\n",dfs(0,0,1));
}
}

这道题的正解是 DP,设计 \(f_{i,j}\) 表示前 \(i\) 个中选 \(j\) 个的概率,则最终的 \(h_i\) 可以通过枚举转移得出

要得出转移,必须要知道第 \(i\) 个数被选的概率 而这个东西等于 \(1\) 减去它不被选的概率,而不被选的概率是 \((1-p_i)^{r-j}\),表示可能选到它的 \(r-j\) 次都没选到(根据定义,有 \(j\) 次选的前面的数,因此不算在里面)

所以有:

\[f_{i,j}=(1−(1−p_{i})^{r−j+1})f_{i−1,j−1}+(1−p_{i})^{r−j}f_{i−1,j}
\]

最后概率乘权值即可.

#include<bits/stdc++.h>
using namespace std;
int n,r;
double ans,p[251],w[251],f[251][251];
int main(){
int cases;scanf("%d",&cases);while(cases--){
scanf("%d %d",&n,&r);
for(int i=1;i<=n;++i){
scanf("%lf %lf",&p[i],&w[i]);
}
memset(f,0,sizeof f);
ans=0;
f[0][0]=1;
double res=0;
for(int i=0;i<=n-1;++i){
for(int j=0;j<=(i<r?i:r);++j){
res=pow(1-p[i+1],r-j);
f[i+1][j]+=f[i][j]*res;
if(j<r){
f[i+1][j+1]+=f[i][j]*(1-res);
ans+=f[i][j]*(1-res)*w[i+1];
}
}
}
printf("%.10lf\n",ans);
}
}

D.货物搬运

暑假集训CSP提高模拟 ∫[0,6] (x^2)/6 dx的更多相关文章

  1. 2015UESTC 暑假集训总结

    day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...

  2. 牛客网NOIP赛前集训营-提高组(第四场)游记

    牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...

  3. 牛客网NOIP赛前集训营-提高组(第四场)B区间

    牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1  \dots   a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...

  4. STL 入门 (17 暑假集训第一周)

    快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...

  5. 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告

    目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...

  6. 暑假集训Day2 互不侵犯(状压dp)

    这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...

  7. 暑假集训Day1 整数划分

    题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...

  8. #10471. 「2020-10-02 提高模拟赛」灌溉 (water)

    题面:#10471. 「2020-10-02 提高模拟赛」灌溉 (water) 假设只有一组询问,我们可以用二分求解:二分最大距离是多少,然后找到深度最大的结点,并且把它的\(k\)倍祖先的一整子树删 ...

  9. #10470. 「2020-10-02 提高模拟赛」流水线 (line)

    题面:#10470. 「2020-10-02 提高模拟赛」流水线 (line) 题目中的那么多区间的条件让人感觉极其难以维护,而且贪心的做法感觉大多都能 hack 掉,因此考虑寻找一些性质,然后再设计 ...

  10. 牛客网NOIP赛前集训营-提高组(第四场)B题 区间

    牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...

随机推荐

  1. SQL Server 锁(LOCK)大全

    一.锁(LOCK)知识及应用 1.1 锁的基础知识 在任何多用户的数据库中,必须有一套用于数据修改的一致的规则.对于真正的事务处理型数据库,当两个不同的进程试图同时修改同一份数据时,数据库管理系统(D ...

  2. 【VMware VCF】VMware Cloud Foundation Part 04:准备 ESXi 主机。

    VMware Cloud Foundation 管理域部署要求至少准备 4 台 ESXi 主机作为最小计算单元,如果采用整合部署(管理域和 VI 工作负载域合并),还需要根据实际情况适量增加 ESXi ...

  3. vue 路由缓存 keep-alive include和exclude无效

    <keep-alive :include="keepAliveData"> <router-view v-if="isShowRouter" ...

  4. 自动驾驶开源数据库 —— nuscenes

    地址: https://www.nuscenes.org/

  5. Ubuntu Server无桌面无显示器情况下虚拟屏幕xvfb的安装及设置—ubuntu18.04server服务器系统下为python安装虚拟显示器 (使用jupyter notebook在web端播放openai的gym下保存的运行视频——需安装ipython)

    1.  安装xvfb sudo apt-get install xvfb Xvfb是流行的虚拟现实库,可以使很多需要图形界面的程序虚拟运行. 2. 安装pyvirtualdisplay pyvirtu ...

  6. 在深度学习的视觉VISION领域数据预处理的魔法常数magic constant、黄金数值的复现: mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225]

    代码: https://gist.github.com/pmeier/f5e05285cd5987027a98854a5d155e27 import argparse import multiproc ...

  7. JDBC Vertica Source Connector 使用文档

    支持以下引擎 Spark Flink SeaTunnel Zeta 关键特性 批处理 精确一次性处理 列投影 并行处理 支持用户自定义拆分 支持查询 SQL 并实现投影效果 描述 通过 JDBC 读取 ...

  8. 跨越时空的对话:如何使用AI阅读工具ChatDOC快速建立数字化身?

    跨越时空的对话:如何使用 ChatDOC 快速建立数字化身?以史蒂夫·乔布斯 AI 为例 开门见山,这篇文章主要介绍如何将 AI 改造为靠谱.好用.基于某个人物的数字化身.比如,乔布斯 AI.马斯克 ...

  9. AtCoder Beginner Contest 310

    freee Programming Contest 2023(AtCoder Beginner Contest 310) - AtCoder A - Order Something Else (atc ...

  10. [最新] Chrome 添加 Cookie 标红的解决方法(测试于119)

    最近发现 Chrome 开发人员工具里无法添加 Cookie,输入名称时整行变红,而且不会自动补充域.大小.过期时间等项. 网上搜全都是 Chrome 96 要开 Partitioned Cookie ...