Day5下
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下的更多相关文章
- python基础六
模块 1.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test) 包:用来从逻辑上 ...
- 【python自动化第五篇:python入门进阶】
今天内容: 模块的定义 导入方法 import的本质 导入优化 模块分类 模块介绍 一.模块定义: 用来在逻辑上组织python代码(变量,函数,逻辑,类):本质就是为了实现一个功能(就是以.py结尾 ...
- C++程序结构---1
C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...
- Kakfa揭秘 Day5 SocketServer下的NIO
Kakfa揭秘 Day5 SocketServer下的NIO 整个Kafka底层都是基于NIO来进行开发的,这种消息机制可以达到弱耦合的效果,同时在磁盘有很多数据时,会非常的高效,在gc方面有非常大的 ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- python笔记 - day5
python笔记 - day5 参考: http://www.cnblogs.com/wupeiqi/articles/5484747.html http://www.cnblogs.com/alex ...
- python_way ,day5 模块,模块3 ,双层装饰器,字符串格式化,生成器,递归,模块倒入,第三方模块倒入,序列化反序列化,日志处理
python_way.day5 1.模块3 time,datetime, json,pickle 2.双层装饰器 3.字符串格式化 4.生成器 5.递归 6.模块倒入 7.第三方模块倒入 8.序列化反 ...
- Catalyst揭秘 Day5 optimizer解析
Catalyst揭秘 Day5 optimizer解析 Optimizer是目前为止中catalyst中最重要的部分.主要作用是把analyzed logicalPlan变成optimized Log ...
- Spark Streaming揭秘 Day5 初步贯通源码
Spark Streaming揭秘 Day5 初步贯通源码 引子 今天,让我们从Spark Streaming最重要的三个环节出发,让我们通过走读,逐步贯通源码,还记得Day1提到的三个谜团么,让我们 ...
随机推荐
- c# 时间格式处理,获取格式: 2014-04-12T12:30:30+08:00
C# 时间格式处理,获取格式: 2014-04-12T12:30:30+08:00 一.获取格式: 2014-04-12T12:30:30+08:00 方案一:(局限性,当不是当前时间时不能使用) ...
- 手机APP测试
注:以下内容来自网络: 一.手机APP测试类型 1.1 接口协议测试 在APP客户端开发设计时,一般服务端会提供相应的接口协议文档,接口协议文档的质量,决定了APP的开发进度.此部分的测试,应首先检测 ...
- JavaScript之入门篇(二)
终于学到后面的语法部分了,感觉这门语言基础部分和当初学习VB的时候感觉一样一样的,章节目录让我不禁又想到了VB课本.由于怕学过了,过段时间忘了,于是,大概总结一下. 数据类型部分 ① Typeof操作 ...
- 取数字(dp优化)
取数字(dp优化) 给定n个整数\(a_i\),你需要从中选取若干个数,使得它们的和是m的倍数.问有多少种方案.有多个询问,每次询问一个的m对应的答案. \(1\le n\le 200000,1\le ...
- Linux的SSH(Secure Shell Protocol)服务
在数据传输前,SSH会对需要传输的数据进行加密,保证会话安全与会话中传输数据的安全,SSH客户端还包含一个远程拷贝scp. 1.SSH的结构 SSH服务由服务端软件(openssh)和客户端(SSH. ...
- chrome插件-YSlow 一个使用的web性能测试插件
本文为转载是文章,如作者发现后不愿意,请联系我进行删除 原文链接:http://www.cnblogs.com/wajika/p/6278825.html YSlow的安装: 1.安装 firebug ...
- P4015 运输问题
\(\color{#0066ff}{题目描述}\) W 公司有 m 个仓库和 n 个零售商店.第 i 个仓库有 \(a_i\) 个单位的货物:第 j 个零售商店需要 \(b_j\) 个单位的货物. 货 ...
- 微信网页授权操作逻辑封装-C#实例
http://blog.csdn.net/u011127019/article/details/52650619
- tfs强行签入和删除工作区
作者:为爱痴狂 原文:http://www.cnblogs.com/splyn/archive/2011/10/31/2230213.html 域用户被网络管理员重建,或者其他用户牵出文档,导致的TF ...
- mysql 存储引擎介绍
一 存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是所有的关系型数据库都有存储引擎这个概念,后面我们还会说,但是现在要确定这一点. 在讲清楚什么是存储引擎之前,我们先来个比喻, ...