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的更多相关文章

  1. 【题解】[CF718C Sasha and Array]

    [题解]CF718C Sasha and Array 对于我这种喜欢写结构体封装起来的选手这道题真是太对胃了\(hhh\) 一句话题解:直接开一颗线段树的矩阵然后暴力维护还要卡卡常数 我们来把\(2 ...

  2. 【Codeforces #312 div2 A】Lala Land and Apple Trees

    # [Codeforces #312 div2 A]Lala Land and Apple Trees 首先,此题的大意是在一条坐标轴上,有\(n\)个点,每个点的权值为\(a_{i}\),第一次从原 ...

  3. 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 ...

  4. 【一天一道LeetCode】#88. Merge Sorted Array

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given t ...

  5. 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 ...

  6. 【Codeforces Round #438 C】 Qualification Rounds

    [链接]h在这里写链接 [题意] 给你n个问题,每个人都知道一些问题. 然后让你选择一些问题,使得每个人知道的问题的数量,不超过这些问题的数量的一半. [题解] 想法题. 只要有两个问题. 这两个问题 ...

  7. 【Codeforces Round #438 B】Race Against Time

    [链接]h在这里写链接 [题意] 时针.分钟.秒针走不过去. 问你从t1时刻能不能走到t2时刻 [题解] 看看时针.分钟.秒针的影响就好. 看看是不是在整时的位置就好. 然后看看影响到x不能到y; 然 ...

  8. 【Codeforces Round #438 A】Bark to Unlock

    [链接]h在这里写链接 [题意] 在这里写题意 [题解] 枚举它是在连接处,还是就是整个字符串就好. [错的次数] 0 [反思] 在这了写反思 [代码] #include <bits/stdc+ ...

  9. 【Codeforces 321E / BZOJ 5311】【DP凸优化】【单调队列】贞鱼

    目录 题意: 输入格式 输出格式 思路: DP凸优化的部分 单调队列转移的部分 坑点 代码 题意: 有n条超级大佬贞鱼站成一行,现在你需要使用恰好k辆车把它们全都运走.要求每辆车上的贞鱼在序列中都是连 ...

随机推荐

  1. 使用XStream是实现XML与Java对象的转换(2)--别名

    五.使用别名(Alias) 首先,有这样一段Java代码: import java.util.ArrayList; import java.util.List; import com.thoughtw ...

  2. 百度编辑器上传视频音频的bug

    前言:UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码,百度Ueditor 支持多种后台语言上传 ...

  3. Spring Boot定时任务应用实践

    在Spring Boot中实现定时任务功能,可以通过Spring自带的定时任务调度,也可以通过集成经典开源组件Quartz实现任务调度. 一.Spring定时器 1.cron表达式方式 使用自带的定时 ...

  4. SpringBoot使用Maven插件打包部署

    [问题] 之前一直用SpringBoot做一些小项目,想打包部署在环境上,总是少依赖包jar.百度下可以通过Spring Boot Maven plugin插件,把Maven配置的依赖包都打到项目包里 ...

  5. Factory Method (工厂模式)

    什么是工厂设计模式 根据名字即可了解,工厂肯定是用来生产产品的,在我们的程序开发中,需要用到不同的类,对于熟悉SSH.SSM开发的可以知道,在初期学习的时候,总是有一个框架提供好的的factory供我 ...

  6. php实现点击文字提交表单并传递数据至下一个页面

    <?php $id="4";//等会要把这个数据传到第二个页面 ?> <?php echo "<li>"; echo " ...

  7. codeforces——961A Tetris

    本文是博主原创文章,未经允许不得转载. 我在csdn上也同步发布了此文,链接 https://blog.csdn.net/umbrellalalalala/article/details/798915 ...

  8. 详解Java的Spring框架中的注解的用法

    转载:http://www.jb51.net/article/75460.htm 1. 使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的 类的实现: class UserMa ...

  9. unix中的rm,rmdir的使用

    一.rm的使用 1.基本用法:用于删除文件 rm filename 2.可加属性值 (1)-v rm -v filename 作用:提示删除的情况 (2)-f  rm -f filename 作用:删 ...

  10. [ASP.NET MVC] Controlle中的Aciton方法数据接收方式

    POST数据接收方式包括: 1.request.Form:(逐个获取表单提交的数据); FormCollection: [HttpPost]public async Task<string> ...