预计分数: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. 洛谷 P1454 圣诞夜的极光

    P1454 圣诞夜的极光 题目背景 圣诞夜系列~~ 题目描述 圣诞老人回到了北极圣诞区,已经快到12点了.也就是说极光表演要开始了.这里的极光不是极地特有的自然极光景象.而是圣诞老人主持的人造极光. ...

  2. Android Studio更改项目SDK的版本

    Elipse 中的安卓项目,在Android Studio中可以通过File -->new -- > Import Project的方法建立起来.但是有时候需要用到更改项目的API Lev ...

  3. c++动态库中使用命名空间的问题

    这是C++才会有的语言特性. 假如你使用一个程序库,他里面有桓霰淞拷衋bc,可是你自己也不小心定义了一个叫abc的变量,这样就会引起重定义错误.所以为了避免这样的现象,C++引入了名字空间(names ...

  4. 有关c语言指针的总结

    #include<stdio.h> void main() { int a[3]={1,3,5};//一维数组 int *num[3]={&a[0],&a[1],& ...

  5. Lesson 2 Building your first web page: Part 1

    In this ‘hands-on’ module we will be building our first web page in no time. We just need to quickly ...

  6. LDAP实现企业异构平台的统一认证

    LDAP实现企业异构平台的统一认证      技术是为应用服务的,没有应用,技术就无用武之地.同样光配置完LDAP服务器没有任何意义,只有把所有需要认证的环节,只有纳入LDAP系统中,才能使它发挥应有 ...

  7. 程序发布出现: 服务器无法处理请求--->无法生成临时类(result = 1)。 错误CS2001:未能找到源文件“C:\ Windows \ TEMP \ lph54vwf.0.cs”

    服务器上发布的web服务程序出错: 服务器无法处理请求--->无法生成临时类(result = 1).错误CS2001:未能找到源文件“C:\ Windows \ TEMP \ lph54vwf ...

  8. intellij idea 13

    mac版 http://pan.baidu.com/s/1c0zjWU8 intellij idea 编辑器之于程序员,犹如鞋之于女人.有的女人赤脚都漂亮,性感. 有的女人赤身都没人看.程序员亦如此. ...

  9. Linux 桌面的 Dock 类程序

    1.Cairo-Dock是一个Dock类软件,它支持OpenGL.提供动画及视觉效果的插件.新的Applet.重写配置面板.新增主题等功能. 2.Docky是从GNOME Do项目剥离出来的一个Doc ...

  10. Windows server 2016 解决“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同。”

    使用克隆的系统时,加域是出现如下问题.“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同.” 问题原因:Windows使用SID来表示所有的安全对象(security principa ...