GODI2018基站
背景:
考场上30分,后来听说是FFT,觉得好高级,感觉这种问题好神仙。
改用MarkdownMarkdownMarkdown。
题意:
在平面直角坐标系给nnn个点,每个点有一个对应的类型(012012012),求两个相同类型夹中点为不同类型的点的方案数。
思路:
由数学知识可以知道,对于三个点(x1,y1)(x_1,y_1)(x1,y1),(x2,y2)(x_2,y_2)(x2,y2),(x3,y3)(x_3,y_3)(x3,y3),当(x2,y2)(x_2,y_2)(x2,y2)为另外两点中点时,必然有x2=x1+x32,y2=y1+y32x_2=\dfrac{x_1+x_3}{2},y_2=\dfrac{y_1+y_3}{2}x2=2x1+x3,y2=2y1+y3,同理,知道后者也可推出前者。
考虑将二维问题转化为一维问题。
对于每一个点的坐标(xi,yi)(x_i,y_i)(xi,yi)变为1000∗xi+yi1000*x_i+y_i1000∗xi+yi。那么对于三个点1000∗x1+y11000*x_1+y_11000∗x1+y1,1000∗x2+y21000*x_2+y_21000∗x2+y2,1000∗x3+y31000*x_3+y_31000∗x3+y3,若1000∗x2+y21000*x_2+y_21000∗x2+y2为其它两点的中点,必然有1000∗x2+y2=1000∗x1+y1+1000∗x3+y321000*x_2+y_2=\dfrac{1000*x_1+y_1+1000*x_3+y_3}{2}1000∗x2+y2=21000∗x1+y1+1000∗x3+y3,即(1000∗x2+y2)∗2=1000∗x1+y1+1000∗x3+y3(1000*x_2+y_2)*2=1000*x_1+y_1+1000*x_3+y_3(1000∗x2+y2)∗2=1000∗x1+y1+1000∗x3+y3。也就是说当前仅当满足y∗2=x+zy*2=x+zy∗2=x+z时,yyy为x,zx,zx,z的中点。同理,知道后者也可推出前者。
问题就变得简单了。
考虑设yyy的类型为000,其它类型同理。
构造Ai=[typei=0]A_i=[type_i=0]Ai=[typei=0],然后另Si=Ai∗AiS_i=A_i*A_iSi=Ai∗Ai。我们有上面可以知道,若yyy点为x,zx,zx,z中点,其结果必然是偶数,而x,zx,zx,z,z,xz,xz,x为一种情况,因此结果需要除以222。所以由SiS_iSi来计算结果即可。
时间复杂度Θ(nlogn)\Theta(nlogn)Θ(nlogn)。
代码:
// luogu-judger-enable-o2
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const double pai=acos(-1.0);
struct comp
{double x,y;comp(double xx=0,double yy=0):x(xx),y(yy) {}friend comp operator+(const comp &x,const comp &y) {return comp(x.x+y.x,x.y+y.y);}friend comp operator-(const comp &x,const comp &y) {return comp(x.x-y.x,x.y-y.y);}friend comp operator*(const comp &a,const comp &b) {return comp(a.x*b.x-a.y*b.y,a.x*b.y+b.x*a.y);}
}a[2500000];int limit=1,n,l=0,ma=0;int r[2500000],ans[2500000],id[2500000];int type[2500000];
void init(int ma)
{while(limit<=(ma<<1))limit<<=1,l++;for(int i=1;i<=limit;i++)r[i]=((r[i>>1]>>1)|((i&1)<<(l-1)));
}
void FFT(comp *now,int ty)
{for(int i=0;i<limit;i++)if(i<r[i]) swap(now[i],now[r[i]]);for(int mid=1;mid<limit;mid<<=1){comp wn(cos(pai/mid),ty*sin(pai/mid));for(int j=0,R=(mid<<1);j<limit;j+=R){comp w(1,0);for(int k=0;k<mid;k++,w=w*wn){comp x=now[j+k],y=w*now[j+k+mid];now[j+k]=x+y;now[j+k+mid]=x-y;}}}
}
void work(int x)
{for(int i=0;i<=limit;i++)a[i]=(comp){0,0};for(int i=0;i<=ma;i++)if(type[i]==x) a[i].x=1; else a[i].x=0;FFT(a,1);for(int i=0;i<=limit;i++)a[i]=a[i]*a[i];FFT(a,-1);for(int i=0;i<=(ma<<1);i+=2)if(type[i/2]&&type[i/2]!=x) ans[i/2]+=(int)floor(a[i].x/limit+0.001)/2;
}
int main()
{int x,y,z;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d %d %d",&x,&y,&z);type[x*1000+y]=z+1;id[i]=x*1000+y;ma=max(ma,x*1000+y);}init(ma);work(1),work(2),work(3);for(int i=1;i<=n;i++)printf("%d\n",ans[id[i]]);
}
GODI2018基站相关推荐
- 手机自带的显示基站命令
安卓手机自带快捷指令显示当前的网络信息,不过手机厂商不同,命令也不一样.每次要用时总想不起来命令,记下备用. (1) HTC 安卓手机 在拨号键盘输入 *#*#4636#*#* , 选择 " ...
- android 获取手机GSM/CDMA信号信息,并获得基站信息
本文转自:http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/ 在Android中我们常用的轻松获取WIFI信号列表,那如 ...
- 全国移动联通基站数据升级包(2013年1月基站升级包).rar
"全国移动联通基站数据升级包(2013年1月基站升级包).rar" 已经上传到CNBLOGS 地址:http://files.cnblogs.com/topwang-com/%E5 ...
- 华为又一重拳!全球首款5G基站核心芯片“天罡”发布!
作者 | 孙浩峰 来源 | CSDN云计算(ID:CSDNcloud) 1 月 24 日,华为在北京举办 5G 发布会暨 2019 世界移动大会预沟通会,发布了全球首款 5G 基站核心芯片--华为天罡 ...
- 通信基站电池,再也不怕丢了
在安防行业细分化的进程中,我们极少关注通信机房的安防需求.但就事实而言,近年来,随着计算机技术.网络技术以及无线通讯技术的发展,我国建设了大量的通信机房.每个机房都有一套独立的设备,包含交换机.服务器 ...
- 三大运营商集体为电费发愁,宣布“智能化关闭5G基站”,5G建设能省则省!
来源:卫星与网络 何为"智能化关闭5G基站" 本月初有消息称,中国联通洛阳分公司分别对已经入网的3种不同基站射频单元设备(AAU),分不同时段定时开启空载状态下的深度休眠功能,从而 ...
- 深度分析:基站+光通信+手机都用到了哪些美国芯片?有何替代?
来源:21ic电子网 摘要:2016年3月8日,美国商务部由于中兴通讯涉嫌违反美国对伊朗的出口管制政策,中兴实行禁运. 丨事件: 2018年04月16日,美国商务部发布对中兴通讯出口权限禁令,禁止美国 ...
- Bzoj1835:[ZJOI2010]基站选址
Sol 设\(f[i][j]\)表示钦定\(i\)建基站,建了\(j\)个基站的最小代价 \(f[i][j]=max(f[l][j-1]+\Sigma_{t=l+1}^{i-1}\)不能影响到的村庄的 ...
- 诺基亚发布首款高功率小基站SCORE以及Flexi Zone LWA支持能力
诺基亚通过一系列创新继续扩展其小基站产品组合的功能,包括增加新的基站类别.NokiaFlexi Zone迷你宏站与小基站一样,非常紧凑,易于部署,并能提供 2 x 20W 功率,可支持运营商经济高效地 ...
最新文章
- 深入解读MySQL8.0 新特性 :Crash Safe DDL
- Java方法案例--比较两个值是否相等
- way.js - 轻量级、持久化的双向绑定JS库
- python turtle 绘图_谈一下Pycharm中关联系统Python解释器的方法
- torch.backends.cudnn.benchmark 加速训练
- cNoteSetColor_命令窗口颜色设置
- Operation,Tensor, Variable
- linux chmod -r,linux chmod -R 777 / 的危害
- hyper-v无法连接本地计算机,如何在Hyper-V虚拟机中访问本地和USB硬盘驱动器
- 南京信息工程大学eduroam使用方法
- android18lazuli,Free 18 Japan for you on AliExpress.
- 5分钟让你整明白美国金融危机爆发的原因
- Android必备回顾:4、单例模式深究
- 32位与64位到底什么区别?
- 上拉电阻、下拉电阻、耦合电容、退耦电容 总结
- ssm城市旅游景点信息交流平台的设计与实现毕业设计源码290915
- 在word中通过endnote打入文献标签
- 魏新 20190919-2 功能测试
- PLSQL 下载地址 Spring jar包
- VirtualBox3.2.8迷你使用手册
热门文章
- Android 仿微信语音聊天,flutter项目结构
- 【京东春招】别人的面经中记录的问题
- 论文笔记2:Combining Lexical, Syntactic, and Semantic Features with Maximum Entropy Models for Extracting
- 详解APP应用分发平台的榜单推荐和搜索排名规则
- 小米路由pro php,家庭实测 | 荣耀路由Pro2 可以吊打小米路由器吗?
- Show出你的高超技能 首届“中国高性能云计算创新大赛”要开赛啦!
- 计算机毕业设计Python+uniapp校园服务微信小程序(小程序+源码+LW)
- 一些学习,有趣,电影,资源网址
- 漫游计算机英语,计算机系统漫游
- SpringBoot Mybatis 读写分离配置(山东数漫江湖)