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\)

于是有

\[\begin{aligned}
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组】模拟 总结的更多相关文章

  1. 5820. 【NOIP提高A组模拟2018.8.16】 非法输入(模拟,字符串)

    5820. [NOIP提高A组模拟2018.8.16] 非法输入 (File IO): input:aplusb.in output:aplusb.out Time Limits: 1000 ms   ...

  2. 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  ...

  3. 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 ...

  4. 2021.03.06【NOIP提高B组】模拟 总结

    T1 看起来十分复杂,打表后发现答案是 \(n*m\mod p\) 具体的证明... 原式的物理意义,就是从坐标原点(0,0),用每一种合法的斜率, 穿过坐标[1 ~ n , 1 ~ m]的方阵中的整 ...

  5. [JZOJ5817] 【NOIP提高A组模拟2018.8.15】 抄代码

    Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...

  6. [JZOJ5818] 【NOIP提高A组模拟2018.8.15】 做运动

    Description 一天,Y 君在测量体重的时候惊讶的发现,由于常年坐在电脑前认真学习,她的体重有了突 飞猛进的增长. 幸好 Y 君现在退役了,她有大量的时间来做运动,她决定每天从教学楼跑到食堂来 ...

  7. JZOJ5822 【NOIP提高A组模拟2018.8.16】 量子纠缠

    这是一道很巧妙的题目. 今早,我调了好久,终于将它切掉了-- 题目 Description Input 第一行包含一个正整数 m,代表操作数. 接下来 m 行,每行可能有以下形式: 1 s 代表将数字 ...

  8. 【NOIP提高A组模拟2018.8.14】 区间

    区间加:差分数组修改 O(n)扫描,负数位置单调不减 #include<iostream> #include<cstring> #include<cstdio> # ...

  9. [jzoj 5782]【NOIP提高A组模拟2018.8.8】 城市猎人 (并查集按秩合并+复杂度分析)

    传送门 Description 有n个城市,标号为1到n,修建道路花费m天,第i天时,若gcd(a,b)=m-i+1,则标号为a的城市和标号为b的城市会建好一条直接相连的道路,有多次询问,每次询问某两 ...

  10. [jzoj 5781]【NOIP提高A组模拟2018.8.8】秘密通道 (最短路)

    传送门 Description 有一副nm的地图,有nm块地,每块是下列四种中的一种: 墙:用#表示,墙有4个面,分别是前面,后面,左面,右面. 起点:用C表示,为主角的起点,是一片空地. 终点:用F ...

随机推荐

  1. JavaScript实现有农历和节气节假日的日历

    运行效果: 源代码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content ...

  2. findmnt、lsblk、mount 命令查看磁盘、目录挂载、挂载点以及文件系统格式等情况

    findmnt 展示出了目标挂载点( TARGET ).源设备( SOURCE ).文件系统类型( FSTYPE )以及相关的挂载选项( OPTIONS ),例如文件系统是否是可读可写或者只读的.根( ...

  3. nacos集群模式搭建踩坑记录

    首先数据库使用的本地的mysql 1.看日志提示no set datasource,使用虚拟机ping本地后发现无法ping通,原因是本地没有关闭防火墙. 2.看日志提示不允许建立数据库连接,原因是r ...

  4. 在定义C++, C通用接口函数时让C++接口支持默认参数

    在SOUI4的开发中,所有SOUI核心对象都采用了一种类似COM接口的技术来导出接口. 这所以采用这种方案,主要目的是为了让SOUI4支持C语言调用,扩展SOUI的使用场景. 众所周知,C++函数的参 ...

  5. springboot中bean的重定义

    需求描述: 项目中应用其他项目的jar包,然后有些controller中的方法有缺陷需要修改. 1.配置添加 spring.main.allow-bean-definition-overriding= ...

  6. VMware下ubuntu 20.04扩容/磁盘

    最近搞zabbix监控,发现搭建的监控server主机磁盘告警.提示/超过阈值80%. 有实在VMware软件下的虚拟机,首先我就是给虚机磁盘增加容量. 增加后发现没什么改变,看来还需要其他操作. 在 ...

  7. 算法篇(1) KMP JS实现最优查找子串

    var strStr = function (haystack, needle) { let i=0, j = 0; let length = haystack.length; let next = ...

  8. 获取iframe的window对象

    在父窗口中获取iframe中的元素 // JS // 方法1: var iframeWindow = window.frames["iframe的name或id"]; iframe ...

  9. SSM框架中返回的是字符串还是页面跳转的问题

    如果你在控制器前的注解是@RestController的话,将返回controller方法指定的String值,@RestController注解相当于@ResponseBody和@Controlle ...

  10. 5 分钟教你快速掌握 GitHub Actions 自动部署博客

    自从 GitHub 宣布 GitHub Actions 在平台上对所有开发人员和存储库可用以来,GitHub Actions 越来越受欢迎.很多第三方平台在生态系统中有速度等限制,将进一步推动开发人员 ...