掌中之物,未必在掌握之中。|

2021hych

园龄:2年7个月粉丝:2关注:2

补题报告之S班暑训第四场

成绩

image

比赛经过

先看了 A 题,想到随机取模,但是,我竟然不知道高精度怎么取模??于是就和正解失之交臂了。至于为啥会有 83 分,我只能说数据太水了,FFT 写高精就超时了一个点

看了 B 题,想了 10 分钟左右写出来方程,5 分钟左右证明单调性,5 分钟左右写代码(顺便证了一下样例里的那个非根式解)。

C 题,看到强制在线,就放弃莫队的了。然后前缀异或和的性质分析出来后,写了一个 DP(因为我不会可持久化 01trie),然后继续换题。

D 题,可以转化为二分图上的动态问题,暴力没时间写了,直接二选一随机输出。奇妙的是,我过了一个点

顺序:ABACAD

赛后补题+分析

A calculate

简要/形式化题意

高精度数 abc,判定 a×b 是否等于 c

题解

随机一个模数,对三个数分别取模当做哈希的数值,判断哈希后是否满足上面那个式子就好了,错误的概率很小,当然也可以多取几个随机模数。

AC code

为啥超时嘞?

B cylinder

简要/形式化题意

底面积为 1,高为 1 的圆柱形盒子装有体积为 V 的水,将底面积为 1,高为 1 的圆锥倒着插入到盒子里,求水此时的高度。

题解

利用小学知识可以列出方程。hh33=V。左边这个东西求个导就知道他在 [0,1] 上是单调递增的,二分就好了。

AC code

#include<bits/stdc++.h>
using namespace std;
const double eps=1e-8;
int T;
double V;
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>T;
	while(T--) {
		cin>>V;
		double l=0.0,r=1.0;
		while(r-l>=eps) {
			double mid=(l+r)/2;
			if(mid-mid*mid*mid/3<=V) l=mid;
			else r=mid;
		}
		cout<<fixed<<setprecision(6)<<l<<endl;
	}
	return 0;
}

C xor

简要/形式化题意

区间最大异或子串问题,强制在线。

题解

首先我们可以用可持久化 01trie 做到 O(n2logV)

当然我们也可以预处理,直接 DP 就好了,做到了 O(n3),单词 O(1)

没错,我们只要用分块平衡两者的复杂度就好了,复杂度 O(nnlogV),可以过。

AC code

咕咕咕

D massage

简要/形式化题意

平面上动态加删点,判断是否存在一个各边平行与网格的多边形。

题解

将加点和删点看做,加了一条行到列的边,和删去,问题转变为一个判环的问题。动态的话,考虑离线做线段树分治(陌生的领域)。

AC code

咕咕咕

考后反思

首先一个是知识点的缺漏(但是提高组会考可持久化?)。然后就是高精度取模这种东西,算是一个小技巧吧。

结尾

咋会出现这么多没学过的知识点捏?

本文作者:2021hych

本文链接:https://www.cnblogs.com/2021hych/p/17615302.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   2021hych  阅读(21)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起