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++时间操作的汇总

    . 获取当前时间 time_t cur_time = time(NULL); . 把整数时间转为字符串时间 string GetStringTime(const time_t time) { stru ...

  2. 【转】32位plsql连接64位oracle

    源地址:http://www.cnblogs.com/ymj126/p/3712727.html

  3. django 基础框架学习 (二)

    Django框架基础-02 Django缓存cookie 1.说明        当我们服务器在响应数据的同时,希望写⼊⼀些缓存数据到客户端        我们可以选择在响应的同时,将要写⼊到客户端的 ...

  4. 树链剖分【洛谷P1505】 [国家集训队]旅游

    P1505 [国家集训队]旅游 题目描述 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城 ...

  5. ie浏览器(Internet Explorer)不播放背景音乐

    这里就不说bgsound了,支持格式较少 一个网站要加背景音乐,好些年没加背景音乐了,用embed标签把背景音乐加上了,Mozilla Firefox,Google Chrome,Safari都正常, ...

  6. python练习六十一:文件处理,读取文件内容

    python练习六十一:文件处理,读取文件内容 假设要读取text.txt文件中内容 写文件(如果有文件,那直接调用就行,我这里自己先创建的文件) list1 = ['python','jave',' ...

  7. 创建有关hbase数据库的项目时所遇到的问题

    1.在以前使用其他数据库时,经常会使用id自增来做主键,但是hbase数据库中不知道怎么来设置自增主键,所以我打算不要id自增主键.然后删除原来的表,重新创建表. 删除表语句: 用drop命令可以删除 ...

  8. java——注解Annotation

    http://www.cnblogs.com/xdp-gacl/p/3622275.html 元注解: @Retention:当 @Retention 应用到一个注解上的时候,它解释说明了这个注解的的 ...

  9. ubuntu 启动 ssh 服务

    $ sudo service ssh start $ sudo /etc/init.d/ssh start 重启 $ sudo /etc/init.d/ssh restart $ sudo servi ...

  10. Windows下VsCode的简单配置

    1. 安装插件 2. 配置终端软件 安装cmder 添加cmder 按下ctrl+shift+p键,输入setting,打开user settings如图: 将  "terminal.int ...