Day5下午解题报告1
预计分数: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的更多相关文章
- Day1下午解题报告
预计分数:0+30+30=60 实际分数:0+30+40=70 T1水题(water) 贪心,按长度排序, 对于第一幅牌里面的,在第二个里面,找一个长度小于,高度最接近的牌 进行覆盖. 考场上的我离正 ...
- Day4下午解题报告
预计分数:30+30+0=60 实际分数:30+30+10=70 稳有个毛线用,,又拿不出成绩来,, T1 https://www.luogu.org/problem/show?pid=T15626 ...
- Day3下午解题报告
预计分数:20+40+30=90 实际分数:40+90+60=190 再次人品爆发&&手感爆发&&智商爆发 谁能告诉我为什么T1数据这么水.. 谁能告诉我为什么T2数据 ...
- Day2下午解题报告
预计分数:100+100+30=230 实际分数:100+100+30=230人品爆发&&智商爆发&&手感爆发 T3数据好水,,要是把数组开大一点的话还能多得10分,, ...
- Day5上午解题报告
预计分数:100+40+30=170 实际假分数:0+0+0=0 CE*3 实际真分数:60+50+0=110 老师没把我的程序放的文件夹里面,于是..... T1 https://www.luogu ...
- 【百度之星2014~复赛 解题报告~正解】The Query on the Tree
声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站 ...
- 冲刺Noip2017模拟赛2 解题报告——五十岚芒果酱
题1 牛跑步(running) [题目描述] 新牛到部队,CG 要求它们每天早上搞晨跑,从 A 农场跑到 B 农场.从 A 农场到 B 农场中有 n- 个路口,分别标上号,A 农场为 号,B 农场为 ...
- 2014-03-01 春季PAT 1073-1076解题报告
今天下午的PAT考试状态不理想,回来怒刷了一遍,解题报告如下: 1073. Scientific Notation (20) 基本模拟题,将一长串的科学计数转换为普通的数字表示方式.思路是是数组存储输 ...
- 【LeetCode】481. Magical String 解题报告(Python)
[LeetCode]481. Magical String 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http:/ ...
随机推荐
- jQuery模拟输出回车键
jQuery模拟输出回车键 学习了:https://zhidao.baidu.com/question/1753748968579760068.html 原文少了个r var e = jQuery.E ...
- [Recompose] Compose Streams of React Props with Recompose’s compose and RxJS
Functions created with mapPropsStream canned be composed together to build up powerful streams. Brin ...
- shell 脚本去掉月份和天数的前导零
#!/bin/sh # # shell 脚本去掉月份和天数的前导零 # 前面填 1 变成百位数,然后减 100 # 去掉前导零的通用方法 $((10#$(date +%m))) # 把字符串分割成数组 ...
- centos7 出现please make your choice from 1 to enter..
忘了截图了 刚出现的~~ 输入1 回车 输入q 回车 最后回车 便可以正常启动
- ADO.Net数据库帮助类
public interface IDBHelper { /// <summary> /// 执行sql语句 /// </summary> /// <param name ...
- Zuul 2 : The Netflix Journey to Asynchronous, Non-Blocking Systems--转
原文地址:http://techblog.netflix.com/2016/09/zuul-2-netflix-journey-to-asynchronous.html We recently mad ...
- Linux企业应用--RHAS 2.1 下安装中文 Lotus Domino R 6.5 图解
原文请到ftp.jms165.com下载,是用上传用户 (RHAS3+ksnapshot+OperOff ...
- 今日SGU 5.14
//SGU 131 还没完全想清楚 留坑 SGU 259 题意:一个机器处理n个任务,每个任务有时间t和传送时间l 收获:贪心 #include<bits/stdc++.h> #defin ...
- jQuery.inArray和splice删除数组元素
不知道数组下标的情况下,删除数组对应元素.实例: var arrays = ['a','b','c','d']; arrays.splice($.inArray('c',arrays),1); ale ...
- 【v2.x OGE教程 12】 关卡编辑器帮助文档
] 关卡编辑器帮助文档 一.简单介绍 关卡编辑器用于游戏关卡界面元素的可视化编辑,包含元素的位置.尺寸以及其他自己定义属性.通过解析生成的数据文件就可以获取关卡信息,并能随时调整.以降低开发工作量,提 ...