博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[JZOJ4330] 【清华集训模拟】几何题
阅读量:5292 次
发布时间:2019-06-14

本文共 1265 字,大约阅读时间需要 4 分钟。

题目大意

也懒得解释题目大意了……


正解

正解居然是\(FFT\)

不要看题目的那个式子这么长,也不要在那个式子上下手。
其实我们会发现,不同的\((x_i-x_j,y_i-y_j,z_i-z_j)\)并不多。
如果我们求出每个三元组的出现次数,后面的就好做了。
那怎么求呢?
祭出我们的大杀器——\(FFT\)
考虑只有一个维怎么做。设两个多项式分别为\(A\)\(B\)
对于\(x_i\),就在\(A\)\(x_i\)这一位上的系数加一;
对于\(x_j\),就在\(B\)\(77-x_j\)这一位上的系数加一。
\(A\)\(B\)乘起来,那么\(77+x_i-x_j\)就是差\(x_i-x_j\)对应的个数。
对于三维,就将这三个数压成一维的就好了。

实际上也可以用NTT。仔细分析一下,就可以发现每个三元组的出现次数肯定是不超过\(998244353\)的。


正解

using namespace std;#include 
#include
#include
#include
#include
#define N 1000000#define MX 3652264#define mo 998244353inline int input(){ char ch=getchar(); while (ch<'0' || '9'
>=1,x=(long long)x*x%mo) if (y&1) res=(long long)res*x%mo; return res;}inline int pow4(int x){x*=x;return x*x;}#define M (1<<22)#define bit 22int n;struct DOT{ int x,y,z; inline DOT rev(){return {77-x,77-y,77-z};}} d[N];inline int pia(const DOT &a){return (a.x*154+a.y)*154+a.z;}int a[1<<22],b[1<<22],cnt[1<<22];int rev[1<<22];inline void ntt(int *a,int flag){ for (int i=0;i
=mo?x+y-mo:x+y); a[k+i]=(x-y<0?x-y+mo:x-y); } } } if (flag==-1){ int invm=my_pow(M,mo-2); for (int i=0;i
>1]>>1|(i&1)<

总结

\(FFT\)\(NTT\)真是个bug般的存在……

转载于:https://www.cnblogs.com/jz-597/p/11421147.html

你可能感兴趣的文章
变量提升
查看>>
线性表可用顺序表或链表存储的优缺点
查看>>
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
opencv安装配置
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
6-1 并行程序模拟 uva210
查看>>
JavaScript动画打开半透明提示层
查看>>
Mybatis生成resulteMap时的注意事项
查看>>
jquery-jqzoom 插件 用例
查看>>
1007. Maximum Subsequence Sum (25)
查看>>
《算法》C++代码 快速排序
查看>>
iframe的父子层跨域 用了百度的postMessage()方法
查看>>
Js apply方法与call方法详解 附ES6新写法
查看>>
linux php全能环境一键安装,小白福利!
查看>>
Note(2): 一个JavaScript的贷款计算器
查看>>
js原型和原型链
查看>>
图片生成缩略图
查看>>
基于SQL调用Com组件来发送邮件
查看>>
关于Mysql select语句中拼接字符串的记录
查看>>