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 ...
随机推荐
- WPF 模仿前端大佬写一个Hover效果
先看一下效果吧: 原博主的地址:[动画进阶]神奇的卡片 Hover 效果与 Blur 的特性探究 - ChokCoco - 博客园 (cnblogs.com) 原效果是一个css效果,我们采用WPF的 ...
- PowerShell 使用
Practice 常用命令 vim $PROFILE # 编辑配置文件 Get-ChildItem *> $null # 抛弃所有输出 whoami Remove-Item -Recurse - ...
- 使用inno setup 打包Pyinstaller生成的文件夹
背景:pyinstaller 6.5.0.Inno Setup 6.2.2 1. 需要先使用pyinstaller打包,生成包括exe在内的可执行文件夹 注意:直接使用pyinstaller打包,生成 ...
- WebShell流量特征检测_冰蝎篇
80后用菜刀,90后用蚁剑,95后用冰蝎和哥斯拉,以phpshell连接为例,本文主要是对这四款经典的webshell管理工具进行流量分析和检测. 什么是一句话木马? 1.定义 顾名思义就是执行恶意指 ...
- if else 代码优化实战
前言 介绍几种方法,不使用if else语句也能做条件判断. 一:使用枚举 首先定义一个公用接口 RoleOperation,表示不同角色所能做的操作 package com.gavin.enums; ...
- 防御DDOS攻击
如何防御DDOS攻击 1.采用高性能的网络设备 首先要保证网络设备不能成为瓶颈,因此选择路由器.交换机.硬件防火墙等设备的时候要尽量选用知名度高.口碑好的产品.再就是假如和网络提供商有特殊关系或协议的 ...
- 了解 Flutter 3.16 功能更新
作者 / Kevin Chisholm 我们在季度 Flutter 稳定版发布会上带来了 Flutter 3.16,此版本包含诸多更新: Material 3 成为新的默认主题.为 Android 带 ...
- 【赵渝强老师】在Hive中使用Load语句加载数据
一.Hive中load语句的语法说明 Hive Load语句不会在加载数据的时候做任何转换工作,而是纯粹的把数据文件复制/移动到Hive表对应的地址.语法格式如下: LOAD DATA [LOCAL] ...
- foobar2000 v2.1.4 汉化版(更新日期:2024.04.24)
foobar2000 v2.1.4 汉化版 -----------------------[软件截图]---------------------- -----------------------[软件 ...
- 7-11 leetcode 2612
请你编写一个异步函数,它接收一个正整数参数 millis ,并休眠这么多毫秒.要求此函数可以解析任何值. ps: promise 期约函数 (异步函数)的使用 ,promise 是一个对象 new ...