[考试反思]1015csp-s模拟测试74:压迫
其实同时也是第27,一大片并列的。
真的是越考越烂。
T1是个弱化的贪心原题,15分钟拿下没什么可说的。
T2打的记忆化搜索,hash_mod太小撞哈希了,50->30
T3,想不到正解,90分钟时打完的莫队随机数据可过但是被感人的数据和感人的评测机卡成n2暴力
后来基本一直在卡常
zkt坐在skyh旁边越学越坏了90分钟在厕所跟我说他A了T3
然而LNC说他AK了什么的听听就好了
然而我始终没有A掉T3,不知道对我的心态是否产生了影响
其实我以为我能过的。。。
但是的确没有想到正解,不就是一个裸的二维偏序嘛。。。
考场上想到一个高分暴力之后,正解的思路反而被阻塞了啊。。。
T1:梦境
之前某场考试的《时间机器》的原题。当时是区间与区间匹配。这题弱化了。不讲吧。
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
struct dream{
int l,r;
friend bool operator<(dream a,dream b){
return a.r>b.r;
}
}d[];
bool com(dream a,dream b){
return a.l<b.l;
}
priority_queue<dream>q;
int n,m,p[],ans;
int main(){//freopen("dream2.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)scanf("%d%d",&d[i].l,&d[i].r);
for(int i=;i<=m;++i)scanf("%d",&p[i]);
sort(p+,p++m);sort(d+,d++n,com);
for(int p1=,i=;i<=m;++i){
while(p1<=n&&d[p1].l<=p[i])q.push(d[p1]),p1++;
while(!q.empty()&&q.top().r<p[i])q.pop();
if(!q.empty())q.pop(),ans++;
}printf("%d\n",ans);
}
T2:玩具
也许算个容斥?算了不瞎说了不然LNC会来ha(n)ck我的
直接算比较难,我们考虑设$f[i][j]$表示$i$个点的树中深度不超过$j$的概率。
直接转移比较困难,因为一棵树可以由一个森林转移而来,那么就设$g[i][j]$表示$i$个点的森林里深度都不超过$j$的概率。
你可以用一个点把森林的每一个根合并起来,$f[i][j]=g[i-1][j-1]$
为了转移,我们需要考虑大的g怎么从小的g转移而来。也就是如何缩小问题规模。
从森林里拿出一棵树,剩下的部分单独考虑就好了。
当然不能乱拿不然会重复,所以我们规定我们只拿编号最小的点所在的树。
设$dp[i][j]$表示$i$个点的图里编号最小的点所在的树的大小为$j$。
可以转移了:$dp[i][j]=dp[i-1][j-1]\times \frac{j-1}{i} + dp[i-1][j] \times \frac{i-j-1}{i} + dp[i-1][j] \times \frac{1}{i}$
后两项合并就是下发题解给的式子。
具体含义是:考虑加入一个点的所有可能,与编号最小的点所在的树上任意一点连边,与其它点连边,或者这个点单独作为一棵新树
最后一种情况容易忘。这也是除$i$而非$(i-1)$的原因了。
考虑g的转移,你随意挑出一个大小为k的树,转移就是$g[i][j]=\sum\limits_{k=1}^{i}g[i-k][j] \times f[k][j]c \times dp[i][k]$
打表发现$dp[i][j]=\frac{1}{i}$,不是巧合,dp[1][1]=1,其余可以归纳证明,所以其实dp数组是无用的。
而f数组完全可以用g表示出来,所以也是多余的。
所以可以用一个g数组干下来。。。
细节稍多,注意处理边界条件,其实都比较好理解,不细说了。
#include<cstdio>
#define int long long
int n,mod,inv[],ans,g[][];
main(){
scanf("%lld%lld",&n,&mod);
inv[]=;for(int i=;i<=n;++i)inv[i]=mod-mod/i*inv[mod%i]%mod;
for(int i=;i<=n;++i)g[][i]=g[][i]=;
for(int i=;i<=n;++i)for(int j=;j<=n;++j)for(int k=;k<=i;++k)
g[i][j]=(g[i][j]+(k==?:(j?g[k-][j-]:))*g[i-k][j]%mod*inv[i])%mod;
for(int i=;i<=n;++i)ans=(ans+(mod+g[n-][i-]-(i>?g[n-][i-]:))*i)%mod;
printf("%lld\n",ans);
}
T3:飘雪圣域
求[l,r]之间的点形成多少联通块。可离线。
联通块数=点数-边数
点数好说,求边数2,也就是边的两个端点都要在[l,r]之间。
经典的二维偏序。
#include<cstdio>
#include<algorithm>
int n,q,ans[],t[];
void add(int p,int w){for(;p<=n;p+=p&-p)t[p]+=w;}
int ask(int p,int a=){for(;p;p^=p&-p)a+=t[p];return a;}
struct mono{int l,r,id;friend bool operator<(mono a,mono b){return a.r>b.r||(a.r==b.r&&a.id>b.id);}}m[];
int main(){
scanf("%d%d",&n,&q);
for(int i=;i<n;++i){
scanf("%d%d",&m[i].l,&m[i].r);
if(m[i].l>m[i].r)std::swap(m[i].l,m[i].r);
add(n+-m[i].l,);
}
for(int i=;i<=q;++i)scanf("%d%d",&m[i+n-].l,&m[i+n-].r),m[i+n-].id=i;
std::sort(m+,m+n+q);
for(int i=;i<n+q;++i)if(m[i].id)ans[m[i].id]=m[i].r-m[i].l+-ask(n+-m[i].l);
else add(n+-m[i].l,-);
for(int i=;i<=q;++i)printf("%d\n",ans[i]);
}
思路积累:
- 题意转化
[考试反思]1015csp-s模拟测试74:压迫的更多相关文章
- [考试反思]0718 NOIP模拟测试5
最后一个是我...rank#11 rank#1和rank#2被外校大佬包揽了. 啊...考的太烂说话底气不足... 我考场上在干些什么啊!!! 20分钟“切”掉T2,又27分钟“切”掉T1 切什么切, ...
- [CSP-S模拟测试74]题解
A.梦境 如果不用去重一定要用Multiset……挂30分算是出题人手下留情了. 贪心.把点排序,区间按右端点递增排序.依次考虑每个区间,取能选的最靠左的点即可.multiset维护. #includ ...
- csps模拟测试74梦境,玩具,飘雪圣域题解
题面:https://www.cnblogs.com/Juve/articles/11679226.html 梦境: 其实还是挺水的,排序错了过不了样例,打了个二分图匹配就跑了 #include< ...
- [考试反思]0814NOIP模拟测试21
前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...
- [考试反思]1109csp-s模拟测试106:撞词
(撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...
- [考试反思]0909csp-s模拟测试41:反典
说在前面:我是反面典型!!!不要学我!!! 说在前面:向rank1某脸学习,不管是什么题都在考试反思后面稍微写一下题解. 这次是真的真的运气好... 这次知识点上还可以,但是答题策略出了问题... 幸 ...
- [考试反思]0729NOIP模拟测试10
安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...
- [考试反思]0714/0716,NOIP模拟测试3/4
这几天时间比较紧啊(其实只是我效率有点低我在考虑要不要坐到后面去吹空调) 但是不管怎么说,考试反思还是要写的吧. 第三次考试反思没写总感觉缺了点什么,但是题都刷不完... 一进图论看他们刷题好快啊为什 ...
- [考试反思]1003csp-s模拟测试58:沉淀
稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...
随机推荐
- 在Linux环境下采用压缩包方式安装JDK 13
本文地址:https://www.cnblogs.com/oberon-zjt0806/p/11663731.html 可以,转载,出处,格式,懂?? 什么是JDK?? 好吧如果你不知道这个问题的话我 ...
- 谈linux服务器运维需要掌握的技能
一.linux基础 包括对Linux整体的理解/使用和基本命令 二.运维的命令 运维相关的工具(命令) 三.基础服务 LAMP或LNMP :Apache/Nginx,MySQL,PHP/Python/ ...
- 加密解密 之base系列编码
Base16 Base16编码使用16个ASCII可打印字符(数字0-9和字母A-F)对任意字节数据进行编码.Base16先获取输入字符串每个字节的二进制值(不足8比特在高位补0),然后将其串联进来, ...
- 什么是STM32的ISP?
上一篇笔记分享了STM32的串口IAP实例:STM32串口IAP分享.其中,下载IAP程序时用ISP的方式进行下载.这里的ISP又是什么呢? ISP方式下载程序原理 ISP:In System Pro ...
- CEILING保留n位小数向上取整
number=3.1415926 CEILING(number*POWER(10,n))/POWER(10,n) 思路为:乘以10的n次方得到要保留的小数部分并转换为整数,再用CEILING向上取整, ...
- Potato土豆win综合提权
0x01 NBNS和WDAP NBNS: 在 Windows 系统中的另外一种名称就是 NetBIOS 名称,准确的说 NetBIOS 名称并非是一种名字系统,而是 Windows 操作系统网络的一个 ...
- python使用input().split()接收多个用户输入
1.input() 接收多个用户输入需要与split()结合使用 host, port, username, passwd, dbname = input("请输入服务器地址,端口号,用户名 ...
- git clone下代码window与unix换行问题
项目中避免不了会写一些shell脚本,使用ln软连接到一个目录.当git clone到windows中,ln连接显示无比怪异(如../xx),打开.sh文件后(仅仅是打开了),git status会看 ...
- 2019.10.26 CSP%您赛第三场
\(CSP\)凉心模拟^_^ --题源\(lqx.lhc\)等各位蒟蒻 题目名称 比赛 传递消息 开关灯 源文件名 \(competition.cpp\) \(message.cpp\) \(ligh ...
- C#的集合类型及使用技巧
在日常开发过程中,我们不能避免的要对批量数据处理,这时候就要用到集合.集合总体上分为线性集合和非线性集合.线性集合是指元素具有唯一的前驱和后驱的数据结构类型:非线性集合是指有多个前驱和后驱的数据结构类 ...