2023NOIP A层联测26 T2 competition
2023NOIP A层联测26 T2 competition
tjm 的做法,很抽象。
考场思路
考虑每道题被做过多少次肯定不现实,那么考虑每一道题有多少次没有做出来。
假设某一次可以做出来题 \(x\) 的人是 \(i\),而 \(i\) 下一个人可以做出这道题的人是 \(j\),于是题 \(x\) 有 \(C_{j-i}^2\) 次不会被做出来(区间可以是 \([k,k]\))。
这样的 \(i,j\) 有多个,设 \(f_{x,i}\) 为第 \(i\) 个可以做出题 \(x\) 的人的编号(显然 \(f_x\) 具有单调性),于是 \(x\) 做不出来的次数 \(cnt_x\) 有:
\]
\(t_x\) 为可以做出题 \(x\) 的人数。
于是最终答案为:
\]
但这样做会 \(O(nm)\),于是 tjm 有更好的做法。
可以建一个坐标系,\(x\) 轴是题目,\(y\) 轴是第 \(i\) 个人。
那么每个人的做题情况都可以用一条水平的线段来表示。
回到答案式,实际上我们不需要求出 \(cnt_i\) 我们只需要知道 \(\sum_{i=1}^n cnt_i\) 的值就好了。
那么我们可以把每次加入一个人的操作看做是在坐标系上加入一条线段。
对于每一道题目肯定都被一条线段覆盖,那么对于连续的一段题目,我们记录覆盖他们最后的线段的左右端点,然后将新加入的线段与有交集的旧线段求贡献(求在这之间会减小多少)。注意,首尾处的旧线段可能无法完全覆盖,需要拆成两条。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=1e9+7;
int n;
ll m,ans;
struct node
{
ll x,y,w;
friend bool operator<(node a,node b){return a.y<b.y;}
};
vector<node>vec;
ll ksm(ll x,ll y)
{
ll sum=1;
for(;y;y/=2,x=x*x%mod) if(y&1) sum=sum*x%mod;
return sum;
}
ll gt(ll a){return a*(a+1)/2%mod;}
void pt(ll x,ll y,ll w)
{
auto it=lower_bound(vec.begin(),vec.end(),(node){0,x,0});
node vl=(node){0,0,-1},vr=(node){0,0,-1};
while((*it).x<=y)
{
if((*it).x<x) vl=(node){(*it).x,x-1,(*it).w};
if((*it).y>y) vr=(node){y+1,(*it).y,(*it).w};
ll vx=max(x,(*it).x),vy=min(y,(*it).y);
ans=(ans-(vy-vx+1)%mod*gt(w-(*it).w-1)%mod+mod)%mod;
vec.erase(it);
}
int vt=it-vec.begin();
if(vr.w!=-1) vec.insert(vec.begin()+vt,vr);
vec.insert(vec.begin()+vt,(node){x,y,w});
if(vl.w!=-1) vec.insert(vec.begin()+vt,vl);
}
int main()
{
scanf("%d%lld",&n,&m);
ans=m%mod*gt(n)%mod;
vec.push_back((node){1,m,0});
vec.push_back((node){m+1,m+1,0});
for(int i=1;i<=n;i++)
{
ll x,y;
scanf("%lld%lld",&x,&y);
pt(x,y,i);
}
pt(1,m,n+1);
printf("%lld",ans*ksm(gt(n),mod-2)%mod);
}
2023NOIP A层联测26 T2 competition的更多相关文章
- ASP.NET MVC4入门到精通系列目录汇总
序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...
- python中的thread
转载自: http://blog.sina.com.cn/s/blog_9f488855010198vn.html 正确与否未验证 python中得thread的一些机制和C/C++不同:在C/C++ ...
- X-Cart 学习笔记 完整目录
如果有需要,可以直接联系博主,讨论学习 一.了解X-CART. 3 二.PHP环境搭建... 3 三.安装配置X-CART. 4 1.下载X-Cart并配置域名,映射地址... 4 2.配置X-Car ...
- 使用ajax实现无刷新改变页面内容
如何使用ajax实现无刷新改变页面内容(也就是ajax异步请求刷新页面),下面通过一个小demo说明一下,前端页面代码如下所示 1 <%@ Page Language="C#" ...
- 七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...
- 【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...
- SIFT特征提取分析(转载)
转载自: http://blog.csdn.net/abcjennifer/article/details/7639681 SIFT(Scale-invariant feature transform ...
- [转]SIFT特征提取分析
SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points) ...
- (六)6.17 Neurons Networks convolutional neural network(cnn)
之前所讲的图像处理都是小 patchs ,比如28*28或者36*36之类,考虑如下情形,对于一副1000*1000的图像,即106,当隐层也有106节点时,那么W(1)的数量将达到1012级别,为了 ...
- 误差逆传播(error BackPropagation, BP)算法推导及向量化表示
1.前言 看完讲卷积神经网络基础讲得非常好的cs231后总感觉不过瘾,主要原因在于虽然知道了卷积神经网络的计算过程和基本结构,但还是无法透彻理解卷积神经网络的学习过程.于是找来了进阶的教材Notes ...
随机推荐
- Kubernetes-6:Pod生命周期介绍(init Container)
Pod生命周期 生命周期 1.API server调用kubelet下达Pod创建指令 2.容器环境初始化 3.进入Pod生命周期内(Pod开始创建) 4.Pod只要创建,就会自动生成一个pause容 ...
- CamoTeacher:玩转半监督伪装物体检测,双一致性动态调整样本权重 | ECCV 2024
论文提出了第一个端到端的半监督伪装目标检测模型CamoTeacher.为了解决半监督伪装目标检测中伪标签中存在的大量噪声问题,包括局部噪声和全局噪声,引入了一种名为双旋转一致性学习(DRCL)的新方法 ...
- 千万级别mysql 分库分表后表分页查询优化方案初探
随着使用的用户群体越来越多,表数据也会随着时间的推移,单表的数据量会越来越大. 以订单表为例,假如每天的订单量在 4 万左右,那么一个月的订单量就是 120 多万,一年就是 1400 多万,随着年数的 ...
- 剖析 Redis List 消息队列的三种消费线程模型
Redis 列表(List)是一种简单的字符串列表,它的底层实现是一个双向链表. 生产环境,很多公司都将 Redis 列表应用于轻量级消息队列 .这篇文章,我们聊聊如何使用 List 命令实现消息队列 ...
- QT数据可视化框架编程实战之三维散点图从入门到精通_补天云QT技术培训专家
简介 本文将介绍支持GPU图形硬件加速的QT数据可视化框架编程实战之三维散点图从入门到精通_补天云QT技术培训专家.本文将创建一个含有三个序列的三维散点图,同时设定了坐标轴的标题和标签,使得用户点击表 ...
- 系统编程-进程-探究父子进程的数据区、堆、栈空间/ 当带缓存的C库函数遇上fork
1. test1 #include <stdio.h> #include <unistd.h> #include <stdlib.h> /******全局变量位于数 ...
- 如何创建一个Java游戏客户端
创建一个完整的Java游戏客户端示例是一个相对复杂的任务,因为它通常涉及图形用户界面(GUI).事件处理.游戏逻辑等多个方面.为了简化,我将提供一个基于Java Swing的简单游戏客户端示例:一个简 ...
- c++可变模板参数
在C++中的可变模板参数使用省略号 ... 来表示一个参数包(Parameter Pack),其具体位置决定了这个包是模板参数包还是函数参数包,以及如何进行参数展开. 1. 模板参数包:c... Ar ...
- /sys/kernel/debug/binder/目录下主要节点含义
/sys/kernel/debug/binder/目录下主要节点含义 state 显示binder设备的整体状态信息 包括进程数量.线程数量.待处理事务数量等 stats 展示binder操作的统计信 ...
- 标准库之 random 模块
一.介绍random模块 1.1.random模块简介 random模块是Python标准库中用于生成伪随机数的模块,伪随机数是通过算法生成的数列,在一定范围内表现出随机性,虽然这些数列在一定程度上是 ...