博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ3771] Triple
阅读量:5301 次
发布时间:2019-06-14

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

Description

有个沙雕樵夫有n把价值互不相同的斧头,某天一个沙雕水神偷走了这个樵夫的一把或两把或三把斧头。樵夫的总损失值就是被偷走的斧头价值和。他想知道对于每个可能的总损失,有几种可能的方案。

注意:如果水神拿走了两把斧头a和b,(a,b)和(b,a)算一种方案。拿走三把斧头时,(a,b,c),(b,c,a),(c,a,b),(c,b,a),(b,a,c),(a,c,b)也只算一种方案。

a_i<=40000。

Solution

这沙雕题面还真是悲伤啊哈哈哈哈哈哈

可以搞出一个生成函数(总觉得就是个桶),就是拿走一个斧头的方案数f(x)

两个数的方案数就是(f*f)(x),但是其中包含了两次使用同一个数的方案数h(x)=f(2x),而其余的方案数统计了两次,所以方案数为(f*f-h)(x)/2

三个数的方案数就是(f*f*f)(x),然后减去三次使用同一个数的方案数g(x)=f(3x),再减去两次使用同一个数的方案数(f*h-g)(x)*3 (里面减掉g是因为三次使用同一个数的方案数被重复计算,再乘3是因为在(f*f*f)(x)中计算了三次((x,x,y),(x,y,x),(y,x,x)),而其余的方案统计了6次,所以方案数为(f*f*f-3*h*f+2*g)(x)/6

总感觉在点值表达那里直接乘起来解释不通所以我是在系数表达那块才乘起来的

还有FFT的空间开几倍是个玄学问题

Code

还是改掉了namespace码风因为实在是太鬼畜了

#include
using std::min;using std::max;using std::swap;using std::vector;typedef double db;typedef long long ll;#define pb(A) push_back(A)#define pii std::pair
#define all(A) A.begin(),A.end()#define mp(A,B) std::make_pair(A,B)const int N=5e5+5;const db Pi=acos(-1);int n,lim,rev[N],val[N],s[N];struct cp{ db x,y; cp (db a=0,db b=0){x=a,y=b;} friend cp operator+(cp a,cp b){return cp(a.x+b.x,a.y+b.y);} friend cp operator-(cp a,cp b){return cp(a.x-b.x,a.y-b.y);} friend cp operator*(cp a,cp b){return cp(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}}f[N],f2[N],f3[N],h[N],g[N],hf[N];int getint(){ int X=0,w=0;char ch=getchar(); while(!isdigit(ch))w|=ch=='-',ch=getchar(); while( isdigit(ch))X=X*10+ch-48,ch=getchar(); if(w) return -X;return X;}void fft(cp *f,int opt){ for(int i=0;i
>1]>>1)|(i&1?lim>>1:0); fft(f,1),fft(h,1); for(int i=0;i

转载于:https://www.cnblogs.com/YoungNeal/p/10106650.html

你可能感兴趣的文章
团队作业
查看>>
数据持久化时的小bug
查看>>
mysql中key 、primary key 、unique key 与index区别
查看>>
bzoj2257
查看>>
Linux查看文件编码格式及文件编码转换<转>
查看>>
Leetcode: Find Leaves of Binary Tree
查看>>
Vue 模板解释
查看>>
http://www.bootcss.com/
查看>>
20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
查看>>
将多张图片和文字合成一张图片
查看>>
自己动手写ORM(01):解析表达式树生成Sql碎片
查看>>
如何使用USBWebserver在本机快速建立网站测试环境
查看>>
百度Ueditor编辑器的Html模式自动替换样式的解决方法
查看>>
变量提升
查看>>
线性表可用顺序表或链表存储的优缺点
查看>>
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
JavaScript动画打开半透明提示层
查看>>
Mybatis生成resulteMap时的注意事项
查看>>