2019.3.12考试&2019.3.13考试&ESTR
过程:太菜了,不写了
T1 基环树直径,一定学
T2 树上斜率优化,类似购票,数据结构/分治算法,一定改
(把点按深度排序倒着跑2e7次斜率优化也能A,orz zyz)
T3 CC原题,码码码,一定补
一定咕
学动态点分治去了
因为各种原因又压进来一篇
过程:太菜了,不写了
T1 神tm 暴力DP+剪枝可过,我以为是暴力然后DP就没剪枝
T2 沙茶博主第一次实际应用生成函数?
根据题目中的递推关系搞出来生成函数
$f[i]=2*f[i-1]+3*f[i-2]$
$x^n=2*x^{n-1}+3*x^{n-2}$
$x^2=2x+3$
解这个方程得到$x=-1$或$x=3$
所以一定有$f_n=k_1(-1)^n+k_23^n$
前两项带进去,解得$k_1=\frac{3}{4}f_0-\frac{1}{4}f_1,k_2=\frac{1}{4}f_0+\frac{1}{4}f_1$
现在要我们求集合s的所有大小为k的子集的子集和的对应项之和

考虑上面的那个东西,相当于把所有物品拿出来做背包,最后$k$次项的系数对答案产生贡献,写一个分治FFT来做
#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=,mod=;
const int Pow=,Bas=(<<Pow)-;
const double pai=acos(-);
struct cpx
{
double x,y;
void Turn(int a,int b)
{
x=a,y=b;
}
}a[N],b[N],c[N],d[N],ort[N];
const cpx b1=(cpx){0.5,};
const cpx b2=(cpx){,-0.5};
const cpx b3=(cpx){,};
const cpx b4=(cpx){,};
cpx operator + (cpx a,cpx b)
{
return (cpx){a.x+b.x,a.y+b.y};
}
cpx operator - (cpx a,cpx b)
{
return (cpx){a.x-b.x,a.y-b.y};
}
cpx operator * (cpx a,cpx b)
{
double x1=a.x,x2=b.x,y1=a.y,y2=b.y;
return (cpx){x1*x2-y1*y2,x1*y2+x2*y1};
}
cpx operator ! (cpx a)
{
a.y=-a.y; return a;
}
char BF[<<],*P1=BF,*P2=BF;
char Gc(){return (P1==P2&&(P2=(P1=BF)+fread(BF,,<<,stdin),P1==P2)?EOF:*P1++);}
template<class Type> void Fread(Type &x)
{
x=; char ch=Gc();
while(!isdigit(ch)) ch=Gc();
while(isdigit(ch)) x=(x<<)+(x<<)+(ch^),ch=Gc();
}
int Roumod(double x)
{
return (long long)(x+0.5)%mod;
}
int Qpow(int x,int k)
{
if(k==) return x;
int tmp=Qpow(x,k/);
return k%?1ll*tmp*tmp%mod*x%mod:1ll*tmp*tmp%mod;
}
#define vint vector<int>
#define vit vector<int> ::iterator
double Sin[M],Cos[M];
int n,m,f0,f1,k1,k2,anss;
int num[N],odf[N],rev[N],xx[N],yy[N],ans[N]; vint fuc; void Trans(cpx *cop,int len,int typ)
{
register int i,j,k;
for(i=;i<len;i++)
if(rev[i]>i) swap(cop[i],cop[rev[i]]);
for(i=;i<=len;i<<=)
{
int lth=i>>;
for(j=;j<len;j+=i)
{
cpx *pts=ort;
for(k=j;k<j+lth;pts+=len/lth,k++)
{
cpx tmp=*pts; if(typ==-) tmp=!tmp;
tmp=tmp*cop[k+lth],cop[k+lth]=cop[k]-tmp,cop[k]=cop[k]+tmp;
}
}
}
if(typ==-)
for(int i=;i<=len;i++)
cop[i].x/=len,cop[i].y/=len;
}
void Mul(cpx *c1,cpx *c2,cpx &a1,cpx &a2,int p,int q)
{
cpx t1=(c1[p]+!c1[q])*b1,t2=(c1[p]-!c1[q])*b2;
cpx t3=(c2[p]+!c2[q])*b1,t4=(c2[p]-!c2[q])*b2;
a1=t1*t3+(t1*t4+t2*t3)*b4,a2=t2*t4;
}
void CDFFT(int *p1,int *p2,int *ans,int len)
{
register int i;
for(i=;i<len;i++)
{
a[i].Turn(p1[i]&Bas,p1[i]>>Pow),p1[i]=;
b[i].Turn(p2[i]&Bas,p2[i]>>Pow),p2[i]=;
}
Trans(a,len,),Trans(b,len,),Mul(a,b,c[],d[],,);
for(i=;i<len;i++) Mul(a,b,c[i],d[i],i,len-i);
Trans(c,len,-),Trans(d,len,-);
for(i=;i<len;i++)
{
long long x1=Roumod(c[i].x),y1=Roumod(c[i].y),x2=Roumod(d[i].x);
ans[i]=(((x2<<(Pow<<))+(y1<<Pow)+x1)%mod+mod)%mod;
}
}
vint Merge(vint v1,vint v2)
{
register int i;
vint ret; ret.clear();
int l1=v1.size()-,l2=v2.size()-,len=l1+l2;
for(i=;i<=l1;i++) xx[i]=v1[i];
for(i=;i<=l2;i++) yy[i]=v2[i];
int lth=; while(lth<=len) lth<<=;
for(i=;i<=lth;i++)
{
rev[i]=(rev[i>>]>>)+(i&)*(lth>>);
ort[i]=(cpx){cos(pai*i/lth),sin(pai*i/lth)};
}
CDFFT(xx,yy,ans,lth);
for(i=;i<=len;i++) ret.push_back(ans[i]);
return ret;
}
vint CDQ(int l,int r)
{
if(l==r)
{
vint ret; ret.clear();
ret.push_back();
ret.push_back(odf[l]);
return ret;
}
else
{
int mid=(l+r)>>;
vint ls=CDQ(l,mid);
vint rs=CDQ(mid+,r);
return Merge(ls,rs);
}
}
int main()
{
register int i;
Fread(n),Fread(m);
for(i=;i<=n;i++) Fread(num[i]);
Fread(f0),Fread(f1);
k2=1ll*(f0+f1)*Qpow(,mod-)%mod,k1=(f0-k2+mod)%mod;
for(i=;i<=n;i++) odf[i]=num[i]%?(mod-):;
fuc=CDQ(,n),anss=1ll*fuc[m]*k1%mod;
for(i=;i<=n;i++) odf[i]=Qpow(,num[i]);
fuc=CDQ(,n),anss=(anss+1ll*fuc[m]*k2%mod)%mod;
printf("%d",anss);
return ;
}
T3


因为各种原因 ESTR 也被扔进来了
T1 取最长的相同的一段即为答案,证明脑补
T2 循环矩阵的矩阵乘法
不动的矩阵先自己快速幂,然后两个对应乘起来即可,多项式乘法优化到$O(n\log^2 n)$,因为用的是vector所以常数惨不忍睹=。=
#pragma GCC optimize(2)
#include<cmath>
#include<cstdio>
#include<cctype>
#include<vector>
#include<cstring>
#include<algorithm>
#define vint vector<int>
#define vit vector<int> ::iterator
using namespace std;
const int N=,mod=;
int n,m,rd,lim,len,G,Gi,Ni; long long t;
int a[N],b[N],c[N],rev[N],pw[][]; vint aa,bb;
void Add(int &x,int y){x+=y;if(x>=mod) x-=mod;}
int Qpow(int x,int k)
{
if(k==) return x;
int tmp=Qpow(x,k/);
return k%?1ll*tmp*tmp%mod*x%mod:1ll*tmp*tmp%mod;
} void Pre()
{
register int i;
G=,Gi=Qpow(G,mod-);
lim=*n-,len=; while(len<=lim) len<<=;
for(int i=;i<=len;i++)
rev[i]=(rev[i>>]>>)+(i&)*(len>>);
for(int i=;i<=;i++)
{
pw[i][]=Qpow(G,(mod-)/(<<i));
pw[i][]=Qpow(Gi,(mod-)/(<<i));
}
}
void Trans(int *arr,int len,int typ)
{
register int i,j,k;
for(i=;i<len;i++)
if(rev[i]>i) swap(arr[rev[i]],arr[i]);
for(i=;i<=len;i<<=)
{
int lth=i>>,ort=pw[(int)log2(i)][typ==-];
for(j=;j<len;j+=i)
{
int ori=,tmp;
for(k=j;k<j+lth;k++,ori=1ll*ori*ort%mod)
{
tmp=1ll*ori*arr[k+lth]%mod;
arr[k+lth]=(arr[k]-tmp+mod)%mod;
arr[k]=(arr[k]+tmp)%mod;
}
}
}
if(typ==-)
{
int Ni=Qpow(len,mod-);
for(i=;i<=len;i++)
arr[i]=1ll*arr[i]*Ni%mod;
}
}
vint Pmul(vint va,vint vb)
{
vint ret; ret.clear();
for(int i=;i<n;i++) a[i]=va[i],b[i]=vb[i];
for(int i=n;i<=len;i++) a[i]=b[i]=;
Trans(a,len,),Trans(b,len,);
for(int i=;i<=len;i++) a[i]=1ll*a[i]*b[i]%mod;
Trans(a,len,-); ret.resize(n);
for(int i=;i<*n-;i++) Add(ret[i%n],a[i]);
return ret;
}
vint Ppow(vint x,long long k)
{
if(k==) return x;
vint tmp=Ppow(x,k>>);
return k%?Pmul(Pmul(tmp,tmp),x):Pmul(tmp,tmp);
}
int main()
{
scanf("%d%lld",&n,&t),Pre();
for(int i=;i<n;i++) scanf("%d",&rd),aa.push_back(rd);
for(int i=;i<n;i++) scanf("%d",&rd),bb.push_back(rd);
bb=Ppow(bb,t),reverse(bb.begin(),bb.end()),aa=Pmul(aa,bb);
printf("%d ",aa[n-]); for(int i=;i<n-;i++) printf("%d ",aa[i]);
return ;
}
T3
若[l,r]中有两个x的倍数,那么一定存在一个a使得a*x和(a+1)*x在[l,r]中,数论分块可过。
可以发现这是有一个分界线的,分界线之后都不合法,也许找出分界线也可以做?
上面fpn,显然假的
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long l,r,k;
int main()
{
scanf("%lld%lld%lld",&l,&r,&k);
if(k==) printf("%lld",r-l+),exit();
long long ll=l-,res=;
for(long long i=,j;i<=ll;i=j+)
{
j=min(ll/(ll/i),r/(r/i));
if(r/i-ll/i>=) res+=j-i+;
}
printf("%lld",r-l++res);
return ;
}
2019.3.12考试&2019.3.13考试&ESTR的更多相关文章
- 19.go语言基础学习(下)——2019年12月16日
2019年12月16日16:57:04 5.接口 2019年11月01日15:56:09 5.1 duck typing 1. 2. 接口 3.介绍 Go 语言的接口设计是非侵入式的,接口编写者无须知 ...
- 16.go语言基础学习(上)——2019年12月16日
2019年12月13日10:35:20 1.介绍 2019年10月31日15:09:03 2.基本语法 2.1 定义变量 2019年10月31日16:12:34 1.函数外必须使用var定义变量 va ...
- 7.搭建hyperledger fabric环境及启动——2019年12月12日
2019年12月12日13:05:16 声明:从网络中学习整理实践而来. 1.介绍fabric Fabric 是一个面向企业应用的区块链框架,基于 Fabric 的开发可以粗略分为几个层面: 1. 参 ...
- AHKManager.ahk AHK管理器 2019年12月15日
AHKManager.ahk AHK管理器 2019年12月15日 快捷键 {Alt} + {F1} ///////////////////////////////////////////// ...
- 2019年12月的第一个bug
现在是2019年12月1日0点27分,我的心情依旧难以平静.这个月是2019年的最后一个月,是21世纪10年代的最后一个月,也是第一批90后30岁以前的最后一个月.就是在这个月的第一天的0点0分,我写 ...
- 34.ITerm配置使用——2019年12月24日
2019年12月23日15:17:36 ITerm使用教程 1.快键键配置 设置方法 设置方法如下: (1)选择 Preference 进入偏好设置: (2)选择 Profiles > Keys ...
- 36.React基础介绍——2019年12月24日
2019年12月24日16:47:12 2019年10月25日11:24:29 主要介绍react入门知识. 1.jsx语法介绍 1.1 介绍 jsx语法是一种类似于html标签的语法,它的作用相当于 ...
- 35.ES6语法介绍——2019年12月24日
2019年12月24日16:22:24 2019年10月09日12:04:44 1. ES6介绍 1.1 新的 Javascript 语法标准 --2015年6月正式发布 --使用babel语法转换器 ...
- 24.mongodb可视化工具部署——2019年12月19日
2019年10月09日17:05:54 教程链接:https://blog.csdn.net/qq_32340877/article/details/79142129 项目名:adminMongo g ...
- 22.Express框架——2019年12月19日
2019年12月19日14:16:36 1. express简介 1.1 介绍 Express框架是后台的Node框架,所以和jQuery.zepto.yui.bootstrap都不一个东西. Exp ...
随机推荐
- 大数据入门第二十五天——logstash入门
一.概述 1.logstash是什么 根据官网介绍: Logstash 是开源的服务器端数据处理管道,能够同时 从多个来源采集数据.转换数据,然后将数据发送到您最喜欢的 “存储库” 中.(我们的存储库 ...
- 20155320《网络对抗》MSF基础应用
20155320<网络对抗>MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode 于exploit,我觉得exploit是利用一些工具和方法,通过 ...
- 五、MYSQL的索引
对于建立的索引(姓,名字,data) 5.1.索引对一下的查询类型有效 1.全值匹配:能查找姓+名为ALLEN.出生日期为1990-11-05的人: 2.最左前缀匹配:可以查找姓为ALLEN的人:即只 ...
- Eclispe与JDK
一.Eclispe 1.1 Eclispe发布版本 下面是目前已知的版本代号 (Release)[2015年2月] Eclipse 3.1 版本代号 IO [木卫1,伊奥] Eclipse 3.2 版 ...
- oracle移动数据/修改数据文件路径
参考:http://wwyz998.blog.163.com/blog/static/321867852011117111832334/ oracle移动数据文件 1.连接到数据库 [oracle@l ...
- [CF1060E]Sergey and Subway[树dp]
题意 给出 \(n\) 个点的树,求 \(\sum_{i=1}^n{\sum_{j=i}^n{\lceil \frac{dis(i,j)}{2} \rceil}}\) . \(n\leq 2 \tim ...
- django请求的生命周期
1. 概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串. 在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页中. Django的请求生命周期是指当用户 ...
- AssetBundleMaster
AssetBundleMaster is an integrated solution for build AssetBundle and load assets from AssetBundles ...
- 拓扑排序(Topological Sort)
Graph 拓扑排序(Topological Sort) 假设一个应用场景:你用 C 编写了一个爬虫工具,其中有很多自定义的库:queue.c.queue.h.stack.c.stack.h.heap ...
- kali linux 安装Nessus
Nessus 介绍: Nessus 是目前全世界最多人使用的系统漏洞扫描与分析软件.总共有超过75,000个机构使用Nessus 作为扫描该机构电脑系统的软件. 下载Nessus,我的是64为,我选择 ...