预计分数:100+60+30=190

实际分数:100+60+30=190

终于有一道无脑T1了哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

T1

https://www.luogu.org/problem/show?pid=T15744

无脑暴力,直接模拟就能水过

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#define Ll long long
using namespace std;
const int MAXN=;
const int INF=0x7fffff;
inline int read()
{
char c=getchar();int flag=,x=;
while(c<''||c>'') {if(c=='-') flag=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-,c=getchar();return x*flag;
}
int n,p,k;
struct node
{
int l;
int change[MAXN];
}lun[MAXN];
int now[MAXN];//每一个位置的值
int pos[MAXN];//每一个值的位置
int main()
{
//freopen("rotate.in","r",stdin);
// freopen("rotate.out","w",stdout);
n=read();p=read();k=read();
for(int i=;i<=n;i++) now[i]=i,pos[i]=i;//每一个数现在是什么
for(int i=;i<=p;i++)
{
lun[i].l=read();
for(int j=;j<=lun[i].l;j++) lun[i].change[j]=read();
lun[i].l++;lun[i].change[lun[i].l]=lun[i].change[];
}
for(int i=p;i>=;i--)
{
for(int j=;j<=lun[i].l-;j++)
now[ pos[ lun[i].change[j] ] ]= lun[i].change[j+];
for(int j=;j<=n;j++) pos[now[j]]=j;
}
for(int i=;i<=n;i++)
printf("%d ",now[i]); return ;
}
/*
(4,1)*(3,1)*(2,1)的话1变成2然后一直是2
2变成1然后变成3
3变成1然后变成4
4变成1 4 3 2
2 4 1
2 3 1
2 2 1
// 2 3 4 1 4 3 3
2 4 2
3 1 2 3
2 1 4
// 2 3 1 4 5 2 4
3 1 2 5
4 3 4 1 2
//5 3 4 2 1
*/

T2

不会,根据&和|的性质骗了60分

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#define Ll long long
using namespace std;
const int MAXN=1e6+;
const int INF=0x7fffff;
const int mod=1e9+;
inline int read()
{
char c=getchar();int flag=,x=;
while(c<''||c>'') {if(c=='-') flag=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-,c=getchar();return x*flag;
}
int n,a,b,c,d;
int sz[MAXN];
int ans=;
int main()
{
// freopen("range.in","r",stdin);
// freopen("range.out","w",stdout);
n=read();a=read();b=read();c=read();d=read();
for(int i=;i<=n;i++) sz[i]=read();
for(int i=;i<=n;i++)
{
int yu=sz[i],huo=sz[i];
for(int j=i;j<=n;j++)
{
yu=yu&sz[j];
huo=huo|sz[j];
if(yu>=a&&yu<=b&&huo>=c&&huo<=d)
ans=(ans+)%mod;
if(yu<a||huo>d) break;
}
}
printf("%d",ans%mod);
return ;
}

正解:

尝试固定左端点,观察右端点有什么性质

可以看出 and运算的值是递减的,or运算的值是递增的

用st表维护and和or的值||线段树||直接找结果

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cassert> using namespace std;
typedef long long LL;
LL mod = 1e9+;
LL cnt;
int s[],n,a,b,c,d;
int sta[][],sto[][];
int aska(int l,int r){
int L=r-l+;
int t = log2(L);
return sta[l][t] & sta[r-(<<t)+][t];
}
int asko(int l,int r){
int L=r-l+;
int t = log2(L);
return sto[l][t] | sto[r-(<<t)+][t];
}
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",&s[i]),sta[i][]=sto[i][]=s[i];
// puts("aaa");
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 andsum = s[i], orsum = s[i]; for(int j=i;j<=n;j++){
int L=j,R=n+;
andsum = aska(i,j);
orsum = asko(i,j);
while(R-L>){
int mid = (L+R)/;
if(aska(i,mid) == andsum && asko(i,mid) == orsum){
L=mid;
}else R=mid;
}
if(a <= andsum && andsum <= b && c <= orsum && orsum <= d){
cnt += L-j+;
}
j=L;
} }
cout<<cnt%mod<<endl; return ;
}

T3

不会,打30分暴力走人

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#define Ll long long
using namespace std;
const int MAXN=1e6+;
const int INF=0x7fffff;
const int mod=1e9+;
inline int read()
{
char c=getchar();int flag=,x=;
while(c<''||c>'') {if(c=='-') flag=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-,c=getchar();return x*flag;
}
int n,k;
int a[MAXN];
struct node
{
int u,v,w,f,nxt;
}edge[MAXN];
int head[MAXN];
int num=;
inline void add_edge(int x,int y)
{
edge[num].u=x;
edge[num].v=y;
edge[num].nxt=head[x];
head[x]=num++;
}
int ans=;
int deep[MAXN];
void pd()
{
queue<int>q;q.push();
int now=a[];
while(q.size()!=)
{
int p=q.front();q.pop();
for(int i=head[p];i!=-;i=edge[i].nxt)
{
if(edge[i].f==&&deep[edge[i].v]>deep[edge[i].u])
{
now+=a[edge[i].v];
q.push(edge[i].v);
}
}
}
if(now==k) ans=(ans+)%mod;
}
void dfs(int now)
{
if(now==num)
{
pd();
return ;
}
edge[now].f=;
edge[now+].f=;
dfs(now+);
edge[now].f=;
edge[now+].f=;
dfs(now+);
}
void make_deep(int now)
{
for(int i=head[now];i!=-;i=edge[i].nxt)
if(deep[edge[i].v]==)
deep[edge[i].v]=deep[now]+,make_deep(edge[i].v);
}
int main()
{
//freopen("fruit.in","r",stdin);
// freopen("fruit.out","w",stdout);
memset(head,-,sizeof(head));
n=read();k=read();
for(int i=;i<=n;i++) a[i]=read();
for(int i=;i<=n-;i++)
{
int x=read(),y=read();
add_edge(x,y);
add_edge(y,x);
}
deep[]=;
make_deep();
edge[].f=;//断
edge[].f=;
dfs();
edge[].f=;
edge[].f=;
dfs();//没断
printf("%d",ans%mod);
return ;
} /*
5 3
2 1 0 1 1
1 2
1 3
3 4
3 5
//7 3 1
1 1 1
1 2
2 3
//2
*/

30分暴力

f[i][j] 表示i 号节点在子树中拿j 个果子的方案数

DFS 时可以直接把父节点状态传下去,减少一维合并复杂度

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#define Ll long long
using namespace std;
const int MAXN=1e6+;
const int INF=0x7fffff;
const int mod=1e9+;
inline int read()
{
char c=getchar();int flag=,x=;
while(c<''||c>'') {if(c=='-') flag=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-,c=getchar();return x*flag;
}
int n,k;
int a[MAXN];
struct node
{
int u,v,w,f,nxt;
}edge[MAXN];
int head[MAXN];
int num=;
inline void add_edge(int x,int y)
{
edge[num].u=x;
edge[num].v=y;
edge[num].nxt=head[x];
head[x]=num++;
}
int ans=;
int deep[MAXN];
void pd()
{
queue<int>q;q.push();
int now=a[];
while(q.size()!=)
{
int p=q.front();q.pop();
for(int i=head[p];i!=-;i=edge[i].nxt)
{
if(edge[i].f==&&deep[edge[i].v]>deep[edge[i].u])
{
now+=a[edge[i].v];
q.push(edge[i].v);
}
}
}
if(now==k) ans=(ans+)%mod;
}
void dfs(int now)
{
if(now==num)
{
pd();
return ;
}
edge[now].f=;
edge[now+].f=;
dfs(now+);
edge[now].f=;
edge[now+].f=;
dfs(now+);
}
void make_deep(int now)
{
for(int i=head[now];i!=-;i=edge[i].nxt)
if(deep[edge[i].v]==)
deep[edge[i].v]=deep[now]+,make_deep(edge[i].v);
}
int main()
{
//freopen("fruit.in","r",stdin);
// freopen("fruit.out","w",stdout);
memset(head,-,sizeof(head));
n=read();k=read();
for(int i=;i<=n;i++) a[i]=read();
for(int i=;i<=n-;i++)
{
int x=read(),y=read();
add_edge(x,y);
add_edge(y,x);
}
deep[]=;
make_deep();
edge[].f=;//断
edge[].f=;
dfs();
edge[].f=;
edge[].f=;
dfs();//没断
printf("%d",ans%mod);
return ;
} /*
5 3
2 1 0 1 1
1 2
1 3
3 4
3 5
//7 3 1
1 1 1
1 2
2 3
//2
*/

总结

就喜欢这种题目区分度大的考试。

拿满暴力分就有一个不错的名次23333

Day5下午解题报告1的更多相关文章

  1. Day1下午解题报告

    预计分数:0+30+30=60 实际分数:0+30+40=70 T1水题(water) 贪心,按长度排序, 对于第一幅牌里面的,在第二个里面,找一个长度小于,高度最接近的牌 进行覆盖. 考场上的我离正 ...

  2. Day4下午解题报告

    预计分数:30+30+0=60 实际分数:30+30+10=70 稳有个毛线用,,又拿不出成绩来,, T1 https://www.luogu.org/problem/show?pid=T15626 ...

  3. Day3下午解题报告

    预计分数:20+40+30=90 实际分数:40+90+60=190 再次人品爆发&&手感爆发&&智商爆发 谁能告诉我为什么T1数据这么水.. 谁能告诉我为什么T2数据 ...

  4. Day2下午解题报告

    预计分数:100+100+30=230 实际分数:100+100+30=230人品爆发&&智商爆发&&手感爆发 T3数据好水,,要是把数组开大一点的话还能多得10分,, ...

  5. Day5上午解题报告

    预计分数:100+40+30=170 实际假分数:0+0+0=0 CE*3 实际真分数:60+50+0=110 老师没把我的程序放的文件夹里面,于是..... T1 https://www.luogu ...

  6. 【百度之星2014~复赛 解题报告~正解】The Query on the Tree

    声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站 ...

  7. 冲刺Noip2017模拟赛2 解题报告——五十岚芒果酱

    题1 牛跑步(running) [题目描述] 新牛到部队,CG 要求它们每天早上搞晨跑,从 A 农场跑到 B 农场.从 A 农场到 B 农场中有 n- 个路口,分别标上号,A 农场为 号,B 农场为 ...

  8. 2014-03-01 春季PAT 1073-1076解题报告

    今天下午的PAT考试状态不理想,回来怒刷了一遍,解题报告如下: 1073. Scientific Notation (20) 基本模拟题,将一长串的科学计数转换为普通的数字表示方式.思路是是数组存储输 ...

  9. 【LeetCode】481. Magical String 解题报告(Python)

    [LeetCode]481. Magical String 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http:/ ...

随机推荐

  1. ArcGIS api for javascript——地图配置-定制缩放动画,定制缩放框

    描述 本例展示了当用户放大或缩小地图时如何定义地图的动画.zoomDuration和zoomRate是Dojo动画属性,他们确定了动画的duration和帧刷新的rate .这些属性单位是毫秒,zoo ...

  2. poj 3261 后缀数组 找反复出现k次的子串(子串能够重叠)

    题目:http://poj.org/problem?id=3261 仍然是后缀数组的典型应用----后缀数组+lcp+二分 做的蛮顺的,1A 可是大部分时间是在调试代码.由于模板的全局变量用混了,而自 ...

  3. 理解ThreadLocal类

    1 ThreadLocal是什么 早在JDK 1.2的版本号中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路. 使用这个工具类能够 ...

  4. 1.Apache Axis配置文件WSDD详解

    转自:https://jyao.iteye.com/blog/1285516 1. Aapche Axis的Web Service Deployment Descriptor(WSDD)文件参考文档. ...

  5. Mysql基础第二部分,针对以后python使用

    #外键 表与表相连 列名 MUL 外键 参照完整性 不能添加另一个表没有的字段create table study_record( id int auto_increment primary key, ...

  6. 关于commJS 和 es6 的一些区别

    CommonJS模块与ES6模块的区别 本文转自 https://www.cnblogs.com/unclekeith/archive/2017/10/17/7679503.html CommonJS ...

  7. 轻量级记事本工具:CintaNotes

    本片文章介绍CintaNotes小工具 功能介绍: 方便.快捷的记录笔记: 快捷地从任何地方等截取内容生成笔记: 高效的记事本内容查询: 轻松的标签管理 支持移动设备和电脑同步(估计要收费) 官网下载 ...

  8. xfce4 + docky ,docky 上面那透明的一条黑色横线去掉方法

    在安装完Debian 9 + xfce4桌面后 ,添加docky启动后,会在docky 上面有一条黑色横线看起来非常不舒服. 去掉方法:设置管理器->窗口管理器微调->合成器->取消 ...

  9. 学习参考《TensorFlow深度学习》高清中文版PDF+英文版PDF+源代码

    我们知道,TensorFlow是比较流行的深度学习框架,除了看手册文档外,推荐大家看看<Tensorflow深度学习>,共分5方面内容:基础知识.关键模块.算法模型.内核揭秘.生态发展.前 ...

  10. 控制div固定在页面的某个位置 ,用js感觉很麻烦 CSS更好一些

    CSS代码:<style type="text/css"> html,body { width:100%; height:100%; margin:0px; paddi ...