令$v$为点数(有公共点的格子中存在红/蓝色)、$e$为边数(有公共边的格子中存在红/蓝色)、$f$为以此法(即仅考虑这些点和边)所分割出的区域数(包括外面)、$s$为连通块个数,将欧拉定理简单扩展,可以得到$v-e+f=s+1$

(对于样例1中红点部分,有$v=16$、$e=24$、$f=10$、$s=1$;对于蓝点部分,有$v=36$、$e=52$、$f=19$、$s=2$)

令$s_{r/b}'$表示红/蓝色中不在边界上的连通块个数,那么答案为$(v_{b}-e_{b}+v_{r}-e_{r})+(f_{b}-f_{r}+s'_{b}-s'_{r})$,令$f'_{b}=f_{b}-s'_{r}$,$f'_{r/b}$即为红/蓝色的格子数量+1(每一个在其内部的另一种颜色的连通块必然恰好对应一个不是红色格子或最外部的区域)

因此,即求出$v/e/f'_{r/b}$,以$f'_{r}$为例,令$f(x)=\sum_{i=1}^{n}x^{a_{i}}\sum_{i=1}^{m}x^{b_{i}}$,则$f(x)=\sum_{i=k}^{\infty}f(x)[i]$($f(x)[i]$表示$f(x)$的$x^{i}$项系数),用fft计算即可(需要13次fft)

 1 #include<bits/stdc++.h>
2 #include<complex.h>
3 using namespace std;
4 #define N (1<<18)
5 #define PI acos(-1.0)
6 #define ll long long
7 #define cp complex<double>
8 struct pol{
9 cp a[N];
10 }x[3],y[3],z;
11 pair<int,int>qu[N];
12 int n,m,q,a[N],b[N],rev[N];
13 ll s[2][N],ans[N];
14 void fft(pol &a,int p){
15 for(int i=0;i<N;i++)
16 if (rev[i]<i)swap(a.a[i],a.a[rev[i]]);
17 for(int i=2;i<=N;i*=2){
18 cp s=cp(cos(2*PI/i),sin(2*PI/i));
19 if (p)s=conj(s);
20 for(int j=0;j<N;j+=i){
21 cp ss=cp(1,0);
22 for(int k=0;k<(i>>1);k++,ss*=s){
23 cp x=ss*a.a[j+k+(i>>1)];
24 a.a[j+k+(i>>1)]=a.a[j+k]-x;
25 a.a[j+k]+=x;
26 }
27 }
28 }
29 }
30 void add(pol &a,int x,int y){
31 fft(a,-1);
32 for(int i=0;i<N;i++){
33 s[0][i]+=x*floor(a.a[i].real()/N+0.5);
34 s[1][i]+=y*floor(a.a[i].real()/N+0.5);
35 }
36 }
37 void init(){
38 for(int i=0;i<N;i++)rev[i]=(i&1)*(N/2)+(rev[i>>1]>>1);
39 for(int i=1;i<=n;i++)x[0].a[a[i]]+=cp(1,0);
40 for(int i=1;i<=m;i++)y[0].a[b[i]]+=cp(1,0);
41 for(int i=0;i<=n;i++)x[1].a[max(a[i],a[i+1])]+=cp(1,0);
42 for(int i=0;i<=m;i++)y[1].a[max(b[i],b[i+1])]+=cp(1,0);
43 a[0]=a[n+1]=b[0]=b[m+1]=0x3f3f3f3f;
44 for(int i=0;i<=n;i++)x[2].a[min(a[i],a[i+1])]+=cp(1,0);
45 for(int i=0;i<=m;i++)y[2].a[min(b[i],b[i+1])]+=cp(1,0);
46 for(int i=0;i<3;i++){
47 fft(x[i],0);
48 fft(y[i],0);
49 }
50 for(int i=0;i<N;i++)z.a[i]=x[0].a[i]*y[0].a[i];
51 add(z,1,1);
52 for(int i=0;i<N;i++)z.a[i]=x[0].a[i]*y[1].a[i];
53 add(z,-1,0);
54 for(int i=0;i<N;i++)z.a[i]=x[1].a[i]*y[0].a[i];
55 add(z,-1,0);
56 for(int i=0;i<N;i++)z.a[i]=x[1].a[i]*y[1].a[i];
57 add(z,1,0);
58 for(int i=0;i<N;i++)z.a[i]=x[0].a[i]*y[2].a[i];
59 add(z,0,-1);
60 for(int i=0;i<N;i++)z.a[i]=x[2].a[i]*y[0].a[i];
61 add(z,0,-1);
62 for(int i=0;i<N;i++)z.a[i]=x[2].a[i]*y[2].a[i];
63 add(z,0,1);
64 }
65 int main(){
66 scanf("%d%d%d",&n,&m,&q);
67 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
68 for(int i=1;i<=m;i++)scanf("%d",&b[i]);
69 init();
70 for(int i=1;i<=q;i++){
71 scanf("%d",&qu[i].first);
72 qu[i].second=i;
73 }
74 sort(qu+1,qu+q+1);
75 ll k=0;
76 for(int i=q,j=N-1;i;i--){
77 while (qu[i].first<=j)k+=s[0][j--];
78 ans[qu[i].second]=k;
79 }
80 k=0;
81 for(int i=1,j=0;i<=q;i++){
82 while (j<qu[i].first)k+=s[1][j++];
83 ans[qu[i].second]-=k;
84 }
85 for(int i=1;i<=q;i++)printf("%lld\n",ans[i]);
86 }

[cf1392I]Kevin and Grid的更多相关文章

  1. Codeforces 1392I - Kevin and Grid(平面图的欧拉定理+FFT)

    Codeforces 题面传送门 & 洛谷题面传送门 模拟赛考到一道和这题有点类似的题就来补了 神仙 GLBR I %%%%%%%%%%%%%%%%%%%% 不过感觉见过类似的题目之后就比较套 ...

  2. ExtJS 4.2 Grid组件的单元格合并

    ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid ...

  3. WPF中Grid实现网格,表格样式通用类

    /// <summary> /// 给Grid添加边框线 /// </summary> /// <param name="grid"></ ...

  4. 在 Windows Phone 中,为 Grid 添加 Tilt 效果

    在 Windows Phone 中,Tilt 效果是比较经典的效果,我们可以很简单的为按钮等控件添加这样的效果(使用 Windows Phone Toolkit 的Tilt 效果),但是,如果我们想要 ...

  5. wpf 列表、菜单 收起与展开,通过Grid DoubleAnimation或者Expander实现

    菜单收缩有很多种方法具体如何实现还是看个人想法: 第一种通过后台控制收起与展开: 效果图: 代码 : <Grid> <Grid.ColumnDefinitions> <C ...

  6. Sencha ExtJS 6 Widget Grid 入门

    最近由于业务需要,研究了一下Sencha ExtJS 6 ,虽然UI和性能上据相关资料说都有提升,但是用起来确实不太顺手,而且用Sencha cmd工具进行测试和发布,很多内部细节都是隐藏的,出了问题 ...

  7. WPF CheckBox样式 ScrollViewer样式 WrapPanel、StackPanel、Grid布局

    本节讲述布局,顺带加点样式给大家看看~单纯学布局,肯定是枯燥的~哈哈 那如上界面,该如何设计呢? 1.一些布局元素经常用到.Grid StackPanel Canvas WrapPanel等.如上这种 ...

  8. [转]ExtJS Grid 分页时保持选中的简单实现方法

    原文地址 :http://www.qeefee.com/article/ext-grid-keep-paging-selection ExtJS中经常要用到分页和选择,但是当选择遇到分页的时候,杯具就 ...

  9. [转]extjs grid的Ext.grid.CheckboxSelectionModel默认选中解决方法

    原文地址:http://379548695.iteye.com/blog/1167234 grid的复选框定义如下:   var sm = new Ext.grid.CheckboxSelection ...

随机推荐

  1. C++学习 2 指针

    指针:指针保存的是数据的地址: #include<iostream> using namespace std; int main() { //1.定义指针 int a = 10; //指针 ...

  2. 基于ZooKeeper,Spring设计实现的参数系统

    一.简介 基于ZooKeeper服务端.ZooKeeper Java客户端以及Spring框架设计的用于系统内部进行参数维护的系统. 二.设计背景 在我们日常开发的系统内部,开发过程中最常见的一项工作 ...

  3. Rafy 框架 - 实体支持只更新部分变更的字段

    Rafy 快一两年没有大的更新了.并不是这个框架没人维护了.相反,主要是因为自己的项目.以及公司在使用的项目,都已经比较稳定了,也没有新的功能添加.但是最近因为外面使用了 Rafy 的几个公司,找到我 ...

  4. 题解 [NOI2019]弹跳

    题目传送门 题目大意 给出 \(n\) 做城市,每座城市都有横纵坐标 \(x,y\).现在给出 \(m\) 个限制 \(p,t,l,r,d,u\),表示从 \(p\) 城市出发,可以花费 \(t\) ...

  5. 使用ShardingSphere-JDBC完成Mysql的分库分表和读写分离

    1. 概述 老话说的好:选择比努力更重要,如果选错了道路,就很难成功. 言归正传,之前我们聊了使用 MyCat 实现Mysql的分库分表和读写分离,MyCat是服务端的代理,使用MyCat的好处显而易 ...

  6. Linux中使用dd制作文件的.img

    dd if=/dev/zero of=new_img.img bs=1M count=20   //生成20M的文件,bs块的大小,count块的数量 mkfs.ext3 new_img.img  / ...

  7. java的加载与执行原理详解

    java程序从开发到最终运行经历了什么? (31) 编译期: 第一步:在硬盘某个位置(随意),新建一个xxx.java文件 第二步:使用记事本或者其他文本编辑器例如EditPlus打开xxx.java ...

  8. UML快速概述 - All you need to know about UML

    UML 是统一建模语言的缩写,就像使用一组图表来可视化软件建模的蓝图(或设计计划).它不仅可以让您彻底评估整个概念,还可以确保团队中的每个人都在同一页面上.   UML 图可以组织成两个不同的组. 结 ...

  9. 无网络下,配置yum本地源

    1. 新建一个没有iso镜像文件的虚拟机: 2. 本地上传一个镜像文件(CentOS7的镜像),到虚拟机已创建的目录: 例如:上传一个镜像文件CentOS-7-x86_64-Everything-17 ...

  10. Noip模拟39 2021.8.14

    T1 打地鼠 都切掉了的简单题 1 #include<bits/stdc++.h> 2 #define int long long 3 using namespace std; 4 con ...