T1

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
const int N=;
int n,m,k,p;
int to[N],nex[N];
int a[N][N];
int main()
{
freopen("rotate.in","r",stdin);
freopen("rotate.out","w",stdout);
scanf("%d%d%d",&n,&p,&k);
for(int j=;j<=n;j++) to[j]=j;
for(int i=;i<=p;i++)
{
scanf("%d",&m);a[i][]=m;
for(int j=;j<=m;j++) scanf("%d",&a[i][j]);
}
for(int i=p;i>=;i--)
{
memset(nex,,sizeof nex);m=a[i][]; for(int j=;j<=m;j++) nex[a[i][j-]]=a[i][j];
nex[a[i][m]]=a[i][]; for(int j=;j<=n;j++)
if(nex[to[j]]) to[j]=nex[to[j]];
}
for(int j=;j<=n;j++)
printf("%d ",to[j]);
return ;
}

first 100

置换,没学过的话模拟就行。考察理解题意了。

正着做:置换的性质。(不知道也能做)

T2

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
const int N=1e4+;
int n,a,b,c,d;
int q[N];
long long ans;
int main()
{
freopen("range.in","r",stdin);
freopen("range.out","w",stdout);
scanf("%d%d%d%d%d",&n,&a,&b,&c,&d); for(int i=;i<=n;i++) scanf("%d",&q[i]); for(int i=,j;i<=n;i++)
{
int ans1,ans2;
ans1=ans2=q[i];
if(ans1<a||ans2>d) continue;
j=i;
for(j;j<=n;j++)
{
ans1&=q[j];ans2|=q[j];
if(ans1<a||ans2>d) break;
if(ans1<=b&&ans2>=c) ans++;
}
}
cout<<ans<<endl;
return ;
}

first 60

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<cmath>
#include<ctime>
using namespace std;
typedef long long LL;
const int N=1e5+;
const LL P=1e9+;
LL ans;
int s[N],sta[N][],sto[N][];
int worka(int l,int r)
{
int L=r-l+;
int t=log2(L);
return sta[l][t]&sta[r-(<<t)+][t];
}
int worko(int l,int r)
{
int L=r-l+;
int t=log2(L);
return sto[l][t]|sto[r-(<<t)+][t];
}
int n,a,b,c,d;
int main()
{
freopen("range.in","r",stdin);
freopen("range-me.out","w",stdout);
scanf("%d%d%d%d%d",&n,&a,&b,&c,&d);
for(int i=;i<=n;i++)
{
scanf("%d",&s[i]);
sta[i][]=sto[i][]=s[i];
} //预处理倍增,下一步能O(1)查询区间值
for(int j=;j<=;j++)
for(int i=;i<=n;i++)
if(i+(<<j)- <=n )
{
sta[i][j]=sta[i][j-]&sta[i+(<<j)][j-];
sto[i][j]=sto[i][j-]|sto[i+(<<j)][j-];
}
//查找区间(具有单调性)
for(int i=;i<=n;i++)
{
int andans,orans;
// andans=orans=s[i];
int j=i;
while(j<=n)
{
int L=j,R=n+,mid;
andans=worka(i,j);
orans=worko(i,j);
while(R-L>)
{
mid=(L+R)>>;
if(worka(i,mid)==andans&&worko(i,mid)==orans)
L=mid;
else R=mid;
}
if(andans>=a&&andans<=b&& orans>=c&&orans<=d)
ans+=L-j+;
j=L;
} }
cout<<ans%P;
}

二分+st优化

先固定左端典,向右搜,查找区间个数。

怎么优化,二分 +倍增。

本来我想’与‘和’或‘是不满足 前缀差等于区间值的性质的。

其实我的想法太狭隘了,仔细想想:无论是’与‘还是’或‘ 都满足两段区间O(1)合成更大区间的性质。

比如f[1,6] & f[3,9],  可以看成f[1,3] & f[3,6]&f[6,9] &f[3,6] 一个数和本身的’‘与’还是本身无影响。

然后就能通过二分把n^n变成nlogn,

T3

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
const int N=;
const int P=1e9+;
int n,k;
int h[N],nex[N*],to[N*],cnt;
int w[N],sum[N],tot[N];//子树节点数,根到这的和
int x,y;
void add()
{
scanf("%d%d",&x,&y);
to[++cnt]=y,nex[cnt]=h[x],h[x]=cnt;
to[++cnt]=x,nex[cnt]=h[y],h[y]=cnt;
}
int vis[N];int ans;
void dfs(int Tot,int Sum,int last)
{
if(Tot==k)
{
int ss=Sum;
for(int i=;i<=n;i++)
if(vis[i])
for(int j=h[i];j;j=nex[j])
if(!vis[to[j]]) Sum++;
Sum=n--Sum;
ans=(1LL*ans+1LL*(<<Sum)%P)%P; Sum=ss;
}
if(Tot>k) return ;
for(int i=last;i<=n;i++)
if(vis[i])
{
int is=;
for(int j=h[i];j;j=nex[j])
if(!vis[to[j]]) {
vis[to[j]]=;
dfs(Tot+w[to[j]],Sum+,i);
vis[to[j]]=;
is=;
}
}
}
int main()
{
freopen("fruit.in","r",stdin);
freopen("fruit.out","w",stdout);
scanf("%d%d",&n,&k);
int is=;
for(int i=;i<=n;i++)
{
scanf("%d",&w[i]);
if(!w[i]) is=;
}
for(int i=;i<n;i++) add(); vis[]=;
dfs(w[],,);
if(!is) ans--;
cout<<ans;
return ;
}

0分

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long LL;
const LL P= 1e9+;
const int N=;
int n,k;
int a[N];
int h[N],nex[N*],to[N*],cnt;
LL f[N][N];
int x,y;
void add()
{
scanf("%d%d",&x,&y);
to[++cnt]=y,nex[cnt]=h[x],h[x]=cnt;
to[++cnt]=x,nex[cnt]=h[y],h[y]=cnt;
}
int dfs(int x,int fa)
{
int sum=,tmp;
for(int i=h[x];i;i=nex[i])
{
if(to[i]==fa) continue;
for(int j=;j<=n-a[to[i]];j++)
f[to[i]][j+a[to[i]]]=f[x][j];
tmp=dfs(to[i],x);
for(int j=;j<=n;j++)
f[x][j]=(f[x][j]*(<<(tmp-))+f[to[i]][j])%P;
sum+=tmp;
}
return sum;
}
int main()
{
freopen("d.in","r",stdin);
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
for(int i=;i<n;i++) add(); f[][a[]]=;
dfs(,);
printf("%lld",(f[][k]));
}

树上dp

说到T3我就不得不吐槽一下,我投入了整套题考试总时间中超过一半的时间,结果0分。遗憾啊。

搜索 搜重了,不知道怎么去重。

正解是个背包(我没看出来。。。),f[i][j]表示在i节点及其子树中拿j个果子的方案数,。

转移的话先遍历子节点,再根据已有信息更新其他字节点,和其父节点。

  dp[x][j] = ((1<<(tmp-1) * dp[x][j] % mod + dp[son][j])% mod

(除了直接相连的边必须断掉之外,其他边怎样都行,2^n 种状态。

Day5下的更多相关文章

  1. python基础六

    模块 1.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test) 包:用来从逻辑上 ...

  2. 【python自动化第五篇:python入门进阶】

    今天内容: 模块的定义 导入方法 import的本质 导入优化 模块分类 模块介绍 一.模块定义: 用来在逻辑上组织python代码(变量,函数,逻辑,类):本质就是为了实现一个功能(就是以.py结尾 ...

  3. C++程序结构---1

    C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...

  4. Kakfa揭秘 Day5 SocketServer下的NIO

    Kakfa揭秘 Day5 SocketServer下的NIO 整个Kafka底层都是基于NIO来进行开发的,这种消息机制可以达到弱耦合的效果,同时在磁盘有很多数据时,会非常的高效,在gc方面有非常大的 ...

  5. Python学习记录day5

    title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...

  6. python笔记 - day5

    python笔记 - day5 参考: http://www.cnblogs.com/wupeiqi/articles/5484747.html http://www.cnblogs.com/alex ...

  7. python_way ,day5 模块,模块3 ,双层装饰器,字符串格式化,生成器,递归,模块倒入,第三方模块倒入,序列化反序列化,日志处理

    python_way.day5 1.模块3 time,datetime, json,pickle 2.双层装饰器 3.字符串格式化 4.生成器 5.递归 6.模块倒入 7.第三方模块倒入 8.序列化反 ...

  8. Catalyst揭秘 Day5 optimizer解析

    Catalyst揭秘 Day5 optimizer解析 Optimizer是目前为止中catalyst中最重要的部分.主要作用是把analyzed logicalPlan变成optimized Log ...

  9. Spark Streaming揭秘 Day5 初步贯通源码

    Spark Streaming揭秘 Day5 初步贯通源码 引子 今天,让我们从Spark Streaming最重要的三个环节出发,让我们通过走读,逐步贯通源码,还记得Day1提到的三个谜团么,让我们 ...

随机推荐

  1. c# 时间格式处理,获取格式: 2014-04-12T12:30:30+08:00

    C#  时间格式处理,获取格式: 2014-04-12T12:30:30+08:00 一.获取格式: 2014-04-12T12:30:30+08:00 方案一:(局限性,当不是当前时间时不能使用) ...

  2. 手机APP测试

    注:以下内容来自网络: 一.手机APP测试类型 1.1 接口协议测试 在APP客户端开发设计时,一般服务端会提供相应的接口协议文档,接口协议文档的质量,决定了APP的开发进度.此部分的测试,应首先检测 ...

  3. JavaScript之入门篇(二)

    终于学到后面的语法部分了,感觉这门语言基础部分和当初学习VB的时候感觉一样一样的,章节目录让我不禁又想到了VB课本.由于怕学过了,过段时间忘了,于是,大概总结一下. 数据类型部分 ① Typeof操作 ...

  4. 取数字(dp优化)

    取数字(dp优化) 给定n个整数\(a_i\),你需要从中选取若干个数,使得它们的和是m的倍数.问有多少种方案.有多个询问,每次询问一个的m对应的答案. \(1\le n\le 200000,1\le ...

  5. Linux的SSH(Secure Shell Protocol)服务

    在数据传输前,SSH会对需要传输的数据进行加密,保证会话安全与会话中传输数据的安全,SSH客户端还包含一个远程拷贝scp. 1.SSH的结构 SSH服务由服务端软件(openssh)和客户端(SSH. ...

  6. chrome插件-YSlow 一个使用的web性能测试插件

    本文为转载是文章,如作者发现后不愿意,请联系我进行删除 原文链接:http://www.cnblogs.com/wajika/p/6278825.html YSlow的安装: 1.安装 firebug ...

  7. P4015 运输问题

    \(\color{#0066ff}{题目描述}\) W 公司有 m 个仓库和 n 个零售商店.第 i 个仓库有 \(a_i\) 个单位的货物:第 j 个零售商店需要 \(b_j\) 个单位的货物. 货 ...

  8. 微信网页授权操作逻辑封装-C#实例

    http://blog.csdn.net/u011127019/article/details/52650619

  9. tfs强行签入和删除工作区

    作者:为爱痴狂 原文:http://www.cnblogs.com/splyn/archive/2011/10/31/2230213.html 域用户被网络管理员重建,或者其他用户牵出文档,导致的TF ...

  10. mysql 存储引擎介绍

    一  存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是所有的关系型数据库都有存储引擎这个概念,后面我们还会说,但是现在要确定这一点. 在讲清楚什么是存储引擎之前,我们先来个比喻, ...