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. IndexedDB,FileSystem- 前端数据库,文件管理系统

    "我们不再需要下载并且安装软件.一个简单的web浏览器和一个可供使用的互联网就足以让我们在任何时间, 任何地点, 还有任何平台上使用任何web应用程序." web应用很酷, 但是相 ...

  2. iOS开发常用第三方库

    UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...

  3. partition List(划分链表)

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  4. 关于非现场审计软件的一些介绍(ACL、IEDA、Teammate)

    http://group.vsharing.com/Article.aspx?aid=661512 IDEA是由caseware开发的数据分析软件.caseware的网址如下:http://www.c ...

  5. Android layout_margin 无效的解决办法

    http://www.aichengxu.com/view/31025 1.如果LinearLayout中使用Android:layout_marginRight不起作用,通过测试原来在android ...

  6. 基类包括字段“ScriptManager1”,但其类型(System.Web.UI.ScriptManager)与控件(System.Web.UI.ScriptManager)的类型不兼容

    首先说下原先的情况,就是原本老项目的Web解决方案是使用.net framework 2.0的老版本, 所以机器也安装过Microsoft ASP.NET 2.0 AJAX Extensions..A ...

  7. Scala编程入门---面向对象编程之Trait

    Scala中Trait是一种特殊概念 首先我们可以将Triat做为接口来使用,此时的Triat就与java中的接口非常相似 在Triat中可以定义抽象方法,就与抽象类中的抽象方法一样,只要不给出具体的 ...

  8. Beta 冲刺day3

    1.昨天的困难,今天解决的进度,以及明天要做的事情 昨天的困难:昨天主要是对第三方与企业复杂的逻辑关系进行分析和优化,以及进行部分模块的功能测试和代码测试. 今天解决的进度:根据前天得到的需求问题进行 ...

  9. 论文笔记(1):Deep Learning.

    论文笔记1:Deep Learning         2015年,深度学习三位大牛(Yann LeCun,Yoshua Bengio & Geoffrey Hinton),合作在Nature ...

  10. 使用Selenium对新浪微博模拟登录

    Selenium的配置 在项目中引入Selenium库 下载chromedriver.exe 在项目代码中加入chromedriver位置的配置 使用Selenium Selenim语法 智能等待 隐 ...