【codeforces 718 C&D】C. Sasha and Array&D. Andrew and Chemistry
C. Sasha and Array
题目大意&题目链接:
http://codeforces.com/problemset/problem/718/C
长度为n的正整数数列,有m次操作,$opt==1$时,对$[L,R]$全部加x,$opt==2$时,对$[L,R]$求$\sum_{i=L}^{R}Fibonacc(a_{i})$。
题解:
线段树+矩阵快速幂。
在每个线段树存一个转移矩阵,然后YY即可。
代码:
#include<cstdio>
#include<cstring>
#define lc t<<1
#define rc (t<<1)|1
typedef long long ll;
const int N=;
const ll mod=(ll)1e9+;
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
struct Martrix{
ll a[][];
Martrix(){memset(a,,sizeof(a));}
inline void e(){
memset(a,,sizeof(a));
for(int i=;i<;i++)
a[i][i]=;
}
inline void fibe(){
for(int i=;i<;i++)
for(int j=;j<;j++)
a[i][j]=;
a[][]=;
}
friend Martrix operator *(Martrix x,Martrix y){
Martrix z;
for(int i=;i<;i++)
for(int j=;j<;j++)
for(int k=;k<;k++)
z.a[i][j]=(z.a[i][j]+x.a[i][k]*y.a[k][j])%mod;
return z;
}
friend Martrix operator ^(Martrix a,int b){
Martrix ans;ans.e();
while(b){
if(b&) ans=ans*a;
b>>=;
a=a*a;
}return ans;
}
}fibe_1;
struct Tree{
Martrix x,lazy;
}tree[N<<];
const int root=;
inline void update(int t){
tree[t].x.a[][]=(tree[lc].x.a[][]+tree[rc].x.a[][])%mod;
tree[t].x.a[][]=(tree[lc].x.a[][]+tree[rc].x.a[][])%mod;
}
inline void downdate(int t){
tree[lc].x=tree[t].lazy*tree[lc].x;
tree[rc].x=tree[t].lazy*tree[rc].x;
tree[lc].lazy=tree[lc].lazy*tree[t].lazy;
tree[rc].lazy=tree[rc].lazy*tree[t].lazy;
tree[t].lazy.e();
}
inline void build(int l,int r,int t){
tree[t].lazy.e();
if(l==r){
int num=read()-;
tree[t].x.fibe();
tree[t].x=(tree[t].x^num)*fibe_1;
return ;
}int mid=l+r>>;
build(l,mid,t<<);build(mid+,r,(t<<)|);
update(t);
}
inline void add(int l,int r,int L,int R,int t,Martrix x){
if(l!=r)
downdate(t);
if(L<=l&&r<=R){
tree[t].x=x*tree[t].x;
tree[t].lazy=x;
return ;
}
int mid=l+r>>;
if(R>mid) add(mid+,r,L,R,rc,x);
if(L<=mid) add(l,mid,L,R,lc,x);
update(t);
}
inline ll sum(int l,int r,int L,int R,int t){
if(l!=r)
downdate(t);
if(L<=l&&r<=R){
return tree[t].x.a[][];
}
int mid=l+r>>;
ll ans=;
if(R>mid) ans+=sum(mid+,r,L,R,rc);
if(L<=mid) ans+=sum(l,mid,L,R,lc);
return ans%mod;
}
int n,m;
int main(){
n=read(),m=read();
fibe_1.a[][]=;
build(,n,);
for(int i=,opt,l,r,x;i<=m;i++){
opt=read();
l=read(),r=read();
if(opt==){
x=read();
Martrix now;now.fibe();
now=now^x;
add(,n,l,r,root,now);
}
else{
printf("%lld\n",sum(,n,l,r,root));
}
}
}
D. Andrew and Chemistry
题目大意&链接:
http://codeforces.com/problemset/problem/718/D
(辣鸡有机化学)给一个无向图,每个节点只允许有至多4条边,且至少一条边,而且这个图是个树,现在新建一个节点,并与这个节点连条边,求可以构成多少个不一样的图(恩……就是是不是同构)。n<=100000
题解:
写个靠谱的哈希……然后因为节点多,但是只会有最多4条边,设F[x][i]表示从第x个节点,走第i条边得到的hash值,如果已经得到F[x][i]就不要再dfs下去了。
(什么你问我时间复杂度)
代码:
#include<cstdio>
#include<algorithm>
#include<set>
inline int read(){
int s=;char ch=getchar();
while(ch<''||ch>'') ch=getchar();
while(ch>=''&&ch<='') s=s*+(ch^),ch=getchar();
return s;
}
typedef unsigned long long ull;
ull P[]={0u,76543u,233u,123457u,56741857u,1537427u};
const int N=;
ull f[N];
ull g[N][];
std::set<ull> st;
int n;
struct edges {
int v;edges *last;
}edge[N<<],*head[N];int cnt;
inline void push(int u,int v){
edge[++cnt]=(edges){v,head[u]};head[u]=edge+cnt;
}
int a[];
inline bool cmp(int x,int y){
return f[x]<f[y];
}
inline void dfs(int x,int fa){
int num=;
f[x]=1u;
int k=;
for(edges *i=head[x];i;i=i->last){
k++;
if(fa==i->v) continue;
if(!g[x][k])
dfs(i->v,x),g[x][k]=f[i->v];
else
f[i->v]=g[x][k];
}
for(edges *i=head[x];i;i=i->last)
if(fa==i->v) continue;
else a[++num]=i->v;
std::sort(a+,a++num,cmp);
for(int i=;i<=num;i++)
f[x]=f[x]*P[]+f[a[i]]*P[i];
}
int red[N];
int main(){
n=read();
for(int i=;i<n;i++){
int u=read(),v=read();
push(u,v);push(v,u);
red[u]++,red[v]++;
}
//printf("s");
for(int i=;i<=n;i++){//printf("i=%d\n",i);
if(red[i]<){
dfs(i,i);
// printf("i=%d\n",i);
st.insert(f[i]);
}
}
printf("%d\n",st.size());
}
【codeforces 718 C&D】C. Sasha and Array&D. Andrew and Chemistry的更多相关文章
- 【题解】[CF718C Sasha and Array]
[题解]CF718C Sasha and Array 对于我这种喜欢写结构体封装起来的选手这道题真是太对胃了\(hhh\) 一句话题解:直接开一颗线段树的矩阵然后暴力维护还要卡卡常数 我们来把\(2 ...
- 【Codeforces #312 div2 A】Lala Land and Apple Trees
# [Codeforces #312 div2 A]Lala Land and Apple Trees 首先,此题的大意是在一条坐标轴上,有\(n\)个点,每个点的权值为\(a_{i}\),第一次从原 ...
- Codeforces Round #373 (Div. 2) E. Sasha and Array 线段树维护矩阵
E. Sasha and Array 题目连接: http://codeforces.com/contest/719/problem/E Description Sasha has an array ...
- 【一天一道LeetCode】#88. Merge Sorted Array
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given t ...
- Codeforces Round #373 (Div. 2) E. Sasha and Array 矩阵快速幂+线段树
E. Sasha and Array time limit per test 5 seconds memory limit per test 256 megabytes input standard ...
- 【Codeforces Round #438 C】 Qualification Rounds
[链接]h在这里写链接 [题意] 给你n个问题,每个人都知道一些问题. 然后让你选择一些问题,使得每个人知道的问题的数量,不超过这些问题的数量的一半. [题解] 想法题. 只要有两个问题. 这两个问题 ...
- 【Codeforces Round #438 B】Race Against Time
[链接]h在这里写链接 [题意] 时针.分钟.秒针走不过去. 问你从t1时刻能不能走到t2时刻 [题解] 看看时针.分钟.秒针的影响就好. 看看是不是在整时的位置就好. 然后看看影响到x不能到y; 然 ...
- 【Codeforces Round #438 A】Bark to Unlock
[链接]h在这里写链接 [题意] 在这里写题意 [题解] 枚举它是在连接处,还是就是整个字符串就好. [错的次数] 0 [反思] 在这了写反思 [代码] #include <bits/stdc+ ...
- 【Codeforces 321E / BZOJ 5311】【DP凸优化】【单调队列】贞鱼
目录 题意: 输入格式 输出格式 思路: DP凸优化的部分 单调队列转移的部分 坑点 代码 题意: 有n条超级大佬贞鱼站成一行,现在你需要使用恰好k辆车把它们全都运走.要求每辆车上的贞鱼在序列中都是连 ...
随机推荐
- WebService学习--(一)webservice相关概念
一.序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成 分.但是不得不承认的是W ...
- 查找链表中是否有环linked-list-cycle
Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...
- openssh升级的坑爹之路
安装Zlib http://zlib.net/zlib-1.2.8.tar.gz tar -zxvf zlib-1.2.8.tar.gz cd zlib-1.2.8 ./configure --sha ...
- 浅析fork()和底层实现
记得以前初次接触fork()函数的时候,一直被“printf”输出多少次的问题弄得比较晕乎.不过,“黄天不负留心人".哈~ 终于在学习进程和进程创建fork相关知识后,总算是大致摸清了其中的 ...
- Yii2数据接口
写接口之前先确认那你已经安装了Yii2的basic版或者advanced版,如果还没有,赶快去看这篇文章:composer安装Yii2. 现在默认你已经安装了basic版或者advanced版了,并且 ...
- python中的类
以下内容是python tutorial的读书笔记: 一.命名空间的分层 二.local赋值语句,nonlocal和global的区别 local赋值语句,它是无法实现对于最里层的作用域的重新绑定的 ...
- php中$_FILES应用实例
允许用户从表单上传文件是非常有用的.先来看一段HTML表单代码 <html> <body> <form action="upload_file.php" ...
- JavaScript路线
看到知乎上有大神回答的,感觉很不错,分享下 首先要说明的是,咱现在不是高手,最多还是一个半桶水,算是入了JS的门. 谈不上经验,都是一些教训. 这个时候有人要说,“靠,你丫半桶水,凭啥教我们”.您先别 ...
- 基于.net的爬虫应用-DotnetSpider
最近应朋友的邀请,帮忙做了个简单的爬虫程序,要求不高,主要是方便对不同网站的爬取进行扩展,获取到想要的数据信息即可.当然,基于数据的后期分析功能是后话,以后的随笔我会逐步的介绍. 开源的爬虫框架比较多 ...
- 团队项目第二阶段个人进展——Day3
一.昨天工作总结 冲刺第三天,基本完成发布页面的布局 二.遇到的问题 添加照片的样式会随照片增加而改变 三.今日工作规划 分析要封装的数据有哪些,数据如何传到后端服务器中