2021.06.12【NOIP提高B组】模拟 总结
T1
题目大意:有 \(n\) 个点,到点 \(i\) 可以获得 \(A_i\) ,同时消耗 \(B_i\)
若当前价值小于 \(B_i\) 则不能到,问从 \(P\) 开始,任一点结束后的最大值。
最大值同时问最多访问点数。开始不用消耗
其实就是把所有 \(A_i\ge B_i\) 的点存下来,然后贪心
考试时脑抽忘记有消耗了。
T2
题意:一个平面上有两个圆心和 \(n\) 个点,每次给你两个圆的半径
问被任意一个圆覆盖的点的个数
考试时拼命想二分,然后憋一小时写了个 0 分
正解离线,知道后直接 WTF ,
设 \(d_1\) 为到点 \(A\) 的距离,\(d_2\) 为到点 \(B\) 的距离
询问按照 \(r_1\) 排序,点按照 \(d_1\) 排序
由于 \(r_1\) 递增,所以 \(r_{i+1}\) 和 \(r_i\) 有公共的答案,
可以均摊 \(O(1)\) 的时间求出点 \(A\) 包含的点,并把它们在树状数组中标记
于是 \(B\) 包含的不重复的点就是那些距离在 \(r_2\) 内且没被标记的点
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=200005,M=200000;
int n,m,tmp,ans[N],t[N],dy[N],l,r,mid,res;
LL ax,ay,bx,by,r1,r2,d2[N],d1[N];
struct qry { LL r1,r2; int id; }q[N];
inline LL sqr(LL x) { return x*x; }
inline bool cmp(qry a,qry b) { return a.r1<b.r1; }
inline void add(int p,int v) { for(;p<=M;p+=p&-p)t[p]+=v; }
inline int ask(int p) { register int s=0; for(;p;p-=p&-p)s+=t[p]; return s; }
void sor(int l,int r) {
register int i=l,j=r;
register LL mid=d1[(l+r)>>1];
while(i<=j) {
while(d1[i]<mid)i++;
while(d1[j]>mid)j--;
if(i<=j) {
swap(d1[i],d1[j]);
swap(d2[i],d2[j]);
i++,j--;
}
}
if(i<r)sor(i,r);
if(j>l)sor(l,j);
}
int main() {
scanf("%d%d",&n,&m);
scanf("%lld%lld%lld%lld",&ax,&ay,&bx,&by);
for(int i=1,x,y;i<=n;i++) {
scanf("%d%d",&x,&y);
d1[i]=ceil(sqrt(sqr(x-ax)+sqr(y-ay)));
d2[i]=ceil(sqrt(sqr(x-bx)+sqr(y-by)));
add(d2[i],1);
}
sor(1,n);
for(int i=1;i<=m;i++) {
scanf("%lld%lld",&q[i].r1,&q[i].r2);
q[i].id=i;
}
sort(q+1,q+m+1,cmp);
for(int i=1,j=1;i<=m;i++) {
for(;d1[j]<=q[i].r1;j++)
add(d2[j],-1);
ans[q[i].id]=j-1+ask(q[i].r2);
}
for(int i=1;i<=m;i++)printf("%d\n",ans[i]);
}
T3
题目大意:求 \(\sum_{i=m}^n i^k\) 模 \(p\) 意义下的值
对于 \(n-m\le 5000\) 的,直接暴力
然后剩下来的都是 \(k\le 2000\) 的数据
其实是恐怖如斯的自然数幂和,用第二类斯特林数
\(S_n^m=S_{n-1}^{m-1}+kS_{n-1}^m\)
定理:\(n^k=\sum_{i=0}^k S_k^i\times i!\times C_n^i\)
于是有
tmp &= \sum_{i=1}^n i^k \\
&= \sum_{a=1}^n\sum_{i=0}^k S_k^i\times i!\times C_a^i \\
&= \sum_{i=0}^k S_k^i\times i! \sum_{a=1}^n C_a^i \\
&= \sum_{i=0}^k S_k^i\times i! \times C_{n+1}^{i+1} \\
&= \sum_{i=0}^k S_k^i\times i! \times \dfrac{(n+1)!}{(i+1)!(n-i)!} \\
&= \sum_{i=0}^k S_k^i \times \dfrac{(n+1)!}{(i+1)(n-i)!} \\
&= \sum_{i=0}^k S_k^i \times \dfrac{\Pi_{j=n-i+1}^{n+1}}{i+1}
\end{aligned}
\]
其中 \(\sum_{a=1}^n C_a^i=C_{n+1}^{i+1}\) 可以由 \(C_n^m=C_{n-1}^{m-1}+C_{n-1}^m\) 展开
由于在区间 \([n-i+1,n+1]\) 中有且只有一个 \(i+1\) 的倍数,循环时找出即可
复杂度 \(O(n^2)\)
#include<bits/stdc++.h>
using namespace std;
typedef long double LD;
typedef long long LL;
typedef unsigned long long uLL;
LL K,n,m,P,ans,tmp,s[2005][2005];
inline LL Mul(uLL x,uLL y) {
return (x*y-(LL)((LD)x/P*y)*P+P)%P;
}
inline LL Pow(LL x,LL y) {
register LL res=1;
for(;y;y>>=1,x=Mul(x,x))
if(y&1)res=Mul(res,x);
return res;
}
inline LL Ans(LL n) {
ans=0;
for(int i=1;i<=K;i++) {
tmp=s[K][i];
for(LL j=n-i+1;j<=n+1;j++) {
if(j%(i+1))tmp=Mul(tmp,j);
else tmp=Mul(tmp,j/(i+1));
}
ans=(ans+tmp)%P;
}
return ans;
}
int main() {
scanf("%lld%lld%lld%lld",&K,&n,&m,&P);
if(n-m<=5000) {
for(;m<=n;m++)(ans+=Pow(m,K))%=P;
return printf("%lld",ans),0;
}
s[0][0]=1;
for(int i=1;i<=K;i++)
for(int j=1;j<=K;j++)
s[i][j]=(s[i-1][j-1]+j*s[i-1][j]%P)%P;
printf("%lld",(Ans(n)-Ans(m-1)+P)%P);
}
T4
题意:给你 \(n\) 个点,每个点会一直想着它的目标点移动,设运动时间无限长
一个点如果跟上它的目标点,就会跟着目标点一起移动
问一组不知道往哪移动的点。一个点不知道的如何移动,当且仅当它的移动方向只决定于它自己的移动方向
前方高能
题目很复杂,其实就是让你找环!
为什么?
因为这是一个 \(n\) 个点 \(n\) 条边的图,至少有一个环
而这个环上的点在移动时距离不断减少,最终都不知道往哪移动
所以,坐标根本没用!
随便从一点出发,找到环即可
#include<bits/stdc++.h>
using namespace std;
const int N=200005;
int n,st,to[N],vis[N],ans[N];
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&to[i]);
st=1;
while(!vis[st]) {
vis[st]=1;
st=to[st];
}
for(int i=to[st];i^st;i=to[i])
ans[++ans[0]]=i;
ans[++ans[0]]=st;
printf("%d\n",ans[0]);
for(int i=1;i<=ans[0];i++)
printf("%d ",ans[i]);
}
总结
T1:不要忘记条件
T2:在线难就离线
T3:自然数幂和
T4:阅读理解
2021.06.12【NOIP提高B组】模拟 总结的更多相关文章
- 5820. 【NOIP提高A组模拟2018.8.16】 非法输入(模拟,字符串)
5820. [NOIP提高A组模拟2018.8.16] 非法输入 (File IO): input:aplusb.in output:aplusb.out Time Limits: 1000 ms ...
- JZOJ 5818. 【NOIP提高A组模拟2018.8.15】 做运动
5818. [NOIP提高A组模拟2018.8.15] 做运动 (File IO): input:running.in output:running.out Time Limits: 2000 ms ...
- JZOJ 5812. 【NOIP提高A组模拟2018.8.14】 区间
5812. [NOIP提高A组模拟2018.8.14] 区间 (File IO): input:range.in output:range.out Time Limits: 1000 ms Memo ...
- 2021.03.06【NOIP提高B组】模拟 总结
T1 看起来十分复杂,打表后发现答案是 \(n*m\mod p\) 具体的证明... 原式的物理意义,就是从坐标原点(0,0),用每一种合法的斜率, 穿过坐标[1 ~ n , 1 ~ m]的方阵中的整 ...
- [JZOJ5817] 【NOIP提高A组模拟2018.8.15】 抄代码
Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...
- [JZOJ5818] 【NOIP提高A组模拟2018.8.15】 做运动
Description 一天,Y 君在测量体重的时候惊讶的发现,由于常年坐在电脑前认真学习,她的体重有了突 飞猛进的增长. 幸好 Y 君现在退役了,她有大量的时间来做运动,她决定每天从教学楼跑到食堂来 ...
- JZOJ5822 【NOIP提高A组模拟2018.8.16】 量子纠缠
这是一道很巧妙的题目. 今早,我调了好久,终于将它切掉了-- 题目 Description Input 第一行包含一个正整数 m,代表操作数. 接下来 m 行,每行可能有以下形式: 1 s 代表将数字 ...
- 【NOIP提高A组模拟2018.8.14】 区间
区间加:差分数组修改 O(n)扫描,负数位置单调不减 #include<iostream> #include<cstring> #include<cstdio> # ...
- [jzoj 5782]【NOIP提高A组模拟2018.8.8】 城市猎人 (并查集按秩合并+复杂度分析)
传送门 Description 有n个城市,标号为1到n,修建道路花费m天,第i天时,若gcd(a,b)=m-i+1,则标号为a的城市和标号为b的城市会建好一条直接相连的道路,有多次询问,每次询问某两 ...
- [jzoj 5781]【NOIP提高A组模拟2018.8.8】秘密通道 (最短路)
传送门 Description 有一副nm的地图,有nm块地,每块是下列四种中的一种: 墙:用#表示,墙有4个面,分别是前面,后面,左面,右面. 起点:用C表示,为主角的起点,是一片空地. 终点:用F ...
随机推荐
- 图片杂乱无章、分享麻烦?HMS Core图片分类服务教你快速筛选、分类、整合相册
如今手机摄影越来越方便,随手一拍就能记录美好生活.但照片越多,整理越麻烦,有的时候我们想对照片进行二次加工.分享,需要不停翻找相册.HMS Core机器学习服务(ML Kit)提供了图片分类服务,方便 ...
- 一篇文章带你搞懂InnoDB的索引|结合样例
关注公众号[程序员白泽],带你走进一个不一样的程序员/学生党 前言 前阵子面试的时候,在第三面问到了MySQL索引相关的知识点,并且给出了一些SQL语句分析索引的执行情况.所以今天这篇文章给大家讲讲索 ...
- 基础设施即代码(IAC),Zalando Postgres Operator UI 入门
Postgres Operator UI 提供了一个图形界面,方便用户体验数据库即服务.一旦 database 和/或 Kubernetes (K8s) 管理员设置了 operator,其他团队就很容 ...
- 从零搭建Pytorch模型教程(三)搭建Transformer网络
前言 本文介绍了Transformer的基本流程,分块的两种实现方式,Position Emebdding的几种实现方式,Encoder的实现方式,最后分类的两种方式,以及最重要的数据格式的介绍. ...
- 2021.08.03 BZOJ 疯狂的馒头(并查集)
2021.08.03 BZOJ 疯狂的馒头(并查集) 疯狂的馒头 - 题目 - 黑暗爆炸OJ (darkbzoj.tk) 重点: 1.并查集的神奇运用 2.离线化 题意: 给一个长为n的序列,进行m次 ...
- docker基础_网络模式
docker网络 网络模式: bridge:docker默认 自己创建会默认使用bridge模式 类似vmware中的NAT模式 其中192.168.1.203是本机在现实世界局域网的ip.172.1 ...
- docker基础_docker镜像与分层
docker镜像与分层 docker镜像由一些松耦合的制度镜像层组成 docker负责堆叠这些镜像层并将它们表示为单个统一的对象 当 docker image pull ubuntu:latest 时 ...
- JS DOM简介
1. 概述 文档对象模型(Document Object Model,简称 DOM),是W3C组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口.W3C 已经定义了一系列的 DOM 接口 ...
- XCTF练习题---WEB---Cookie
XCTF练习题---WEB---Cookie flag:cyberpeace{dc6a6799546a3e0fbfeacb8650b55ff0} 解题步骤: 1.观察题目,打开场景 2.观察场景内容, ...
- FreeRTOS --(14)队列管理之概述
转载自 https://blog.csdn.net/zhoutaopower/article/details/107221175 在任何的 OS 中,都需要支持任务与任务,中断与任务之间的数据传输机制 ...