首页 > 其他分享 >P5987 [PA2019] Terytoria / 2023NOIP A层联测13 T3 全球覆盖

P5987 [PA2019] Terytoria / 2023NOIP A层联测13 T3 全球覆盖

时间:2023-10-18 22:36:00浏览次数:28  
标签:13 val PA2019 int 线段 T3 long 64 first

P5987 [PA2019] Terytoria / 2023NOIP A层联测13 T3 全球覆盖

题面及数据范围

对于一个点对,可以降维为线段,转化为 1 维的问题。

如图:

我们可以在横着的方向和竖着的方向个选择一种颜色的线段,任意一种选择可以构成一个合法的矩形。

我们需要求最大重叠面积,可以转化为两个一维的求最大公共线段交的问题,最后将答案相乘即为原问题。(横着选和竖着选互不干扰)

一维的问题为:

在数轴上有若干条线段,线段有一个起点和一个终点,选择这条线段或选择这条线段的补集,求最大公共交集。

先分析线段数小于 64 的情况。

我们给每一条线段左端点和右端点一个相同的值 val,val 为 2 的整数次方且每个 val 各不相同。

如图:

f[i] 为取到第 i 个点的选择情况,f[i]=f[i-1]\bigoplus val[i]。

如果 f[i] 中第 i 位为 1 表示需要选这条线段才可以选这个点。

求相同 f[i] 的点有多少即可。

如果大于 64 我们无法给每个线段分配唯一的 val 值,我们可以在 [0,2^{64}] 中随机一个数作为 val 值。

尽管可能有错误,不过根据生日悖论正确率高达 99.9936\%。

CODE

 #include<bits/stdc++.h>
 using namespace std;
 ​
 #define ull unsigned long long
 #define int long long
 #define piu pair<int,ull>
 ​
 mt19937_64 rnd(random_device{}());
 ​
 const int maxn=1e6+5;
 ​
 int n,x,y;
 int a[2][maxn];
 ​
 piu b[maxn];
 ​
 int sv(int *a,int X)
 {
     for(int i=0;i<n;i+=2)
    {
         ull v=rnd();
         b[i]=make_pair(a[i],v);
         b[i+1]=make_pair(a[i+1],v);
    }
     ull now=0;sort(b,b+n);
     unordered_map<ull,int>mp;
     b[n].first=X;
     mp[0]=b[0].first;
     for(int i=0;i<n;i++)
    {
         now^=b[i].second;mp[now]+=b[i+1].first-b[i].first;
    }
     int ans=0;
     for(auto v:mp) ans=max(ans,v.second);
     return ans;
 }
 ​
 signed main()
 {
     scanf("%lld%lld%lld",&n,&x,&y);
     n<<=1;
     for(int i=0;i<n;i++) for(int j=0;j<2;j++) scanf("%lld",&a[j][i]);
     printf("%lld",sv(a[0],x)*sv(a[1],y));
 }
 

标签:13,val,PA2019,int,线段,T3,long,64,first
From: https://www.cnblogs.com/binbinbjl/p/17773528.html

相关文章

  • Swagger系列:SpringBoot3.x中使用Knife4j
    目录一、简介二、版本说明三、使用四、效果图一、简介官网:https://doc.xiaominfo.com/Knife4j是一个集Swagger2和OpenAPI3为一体的增强解决方案Knife4j是为JavaMVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,致力于springfox-swagger......
  • 初学Bokeh:使用注释【13】跬步
    初学Bokeh:使用注释【13】跬步注释也是一种绘图中的可视化元素,为绘图添加注释可使绘图更易理解。例如,方框注释就是一种常用的注释方式。我们可以利用方框注释来突出显示绘图的某些区域。要在绘图中添加方框注释,首先需要从bokeh.models中导入BoxAnnotation类:frombokeh.model......
  • NOIP2018PJ T3 摆渡车(2023.10第二版题解)
    题目链接 题意:时间轴上分布着$n$位乘客($1\len\le500$),$i$号乘客的位置为$t_i$(0\let_i\le4\times10^6),用互相距离不小于$m$的车次将时间轴分为若干部分,并管辖以自己为右端点的这个区间(除了第一趟车包括$0$,其他车次左开右闭),求最小费用和。每个车次的费用来自:管辖区间内所......
  • 算法训练day36 1005.134.135.
    算法训练day361005.134.135.1005.K次取反后最大化的数组和题目1005.K次取反后最大化的数组和-力扣(LeetCode)题解代码随想录(programmercarl.com)将数字按绝对值大小排序优先将绝对值最大的负数取反剩余步骤将最小非负数取反注意数组大小顺序,以及处理剩余......
  • 胜利一中 2023 秋提高级友好学校赛前联测 2 T3
    乱杀题目描述乐孤星和WA90准备联合参加下一次的NOB(NationalOlympiadinBadminton)。他们想要在一场比赛中击回对手打出的所有球从而赢得比赛,因为WA90非常强,所以可以预先知道对手打出的每一个球的位置,他们想要计算一下打败对手需要多认真。形式化的,我们将羽毛球场比作......
  • T3-lichee编译环境设置
    sudoaptinstallmakegccbcu-boot-toolsbzip2fakerootgawkmkbootimgbusybox 问题1:usr/bin/ld:scripts/dtc/dtc-parser.tab.o:(.bss+0x50):multipledefinitionof`yylloc’;scripts/dtc/dtc-lexer.lex.o:(.bss+0x0):firstdefinedhere原因:gcc版本过高解决方......
  • [SDOI2013] 泉
    考虑容斥。我们记至少有\(i\)个指标相同的年份对数为\(f_i\),那么最终答案为:\[\sum_{i=k}^n(-1)^{i-k}\timesf_i\]\(f_i\)可以通过枚举状态,之后通过字符串哈希来计数得到(注意指标只有\(6\)个)。字符串哈希可以把base设为\(10^9+7\),模数设为\(2^64\)(也即unsignedlon......
  • 2023.10.13NOIPSIM3总结
    T1卡牌赛时打了一个\(\Omicron(nm)\)的暴力,拿到30分。我们发现第\(i\)张牌对BOSS造成的伤害为$att_i*\lceil\frac{hp_i}{Att}\rceil$,那么考虑以卡牌血量值域为下标开一个桶,储存相同血量的卡牌的\(\sumatt\)。对于每一级BOSS的攻击力,我们都可以在桶上根据\(\lceil......
  • 136. 只出现一次的数字
    给你一个非空整数数组nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。示例1:输入:nums=[2,2,1]输出:1思路异或性质:(1)0⊕0=0,0⊕1=1,1⊕0=1,1......
  • AT_abc134_d Preparing Boxes题解
    简述题意这什么破翻译,看了AtCoder的英文才看懂。给定一个长度为\(n\)序列\(a\),要求构造一个数列\(b\),使得对于任意\(i\),满足:\(1\lei\len\)将\(b\)序列下标为\(i\)的倍数的值相加使得这个总和模2等于\(a_i\)。求序列\(b\)中值为1的个数与值为1......