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:/ ...
随机推荐
- 【Android 进阶】图片载入框架之Glide
简单介绍 在泰国举行的谷歌开发人员论坛上,谷歌为我们介绍了一个名叫 Glide 的图片载入库,作者是 bumptech.这个库被广泛的运用在 google 的开源项目中,包含 2014 年 googl ...
- Android——4.2.2 文件系统文件夹分析
近期公司要整android内部培训,分配给我写个培训文档.这里记录例如以下: 撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/details/4089 ...
- 两天学会DirectX 3D之入门
环境配置以及背景知识 环境 Windows 8.1 64bit VS2013 Microsoft DirectX SDK (June 2010) NVDIA Geforce GT755 环境的配置參考 ...
- HDU 5883 欧拉回路
题面: 思路: 这里面有坑啊啊啊-.. 先普及一下姿势: 判断无向图欧拉路的方法: 图连通,只有两个顶点是奇数度,其余都是偶数度的. 判断无向图欧拉回路的方法: 图连通,所有顶点都是偶数度. 重点:图 ...
- codeforces 357C Knight Tournament(set)
Description Hooray! Berl II, the king of Berland is making a knight tournament. The king has already ...
- Asp.Net碎知识
在aspx页面 获取值: UserModel user=new UserModel();实例化 user.Address=context["txtAddress"]; 如果前台不需 ...
- jquery.base64.js
(function($) { $.base64 = function(options) { var defaults = { data:"", type:0, unicode:tr ...
- c# 导出excel格式xlsx
string sb="";//sql字符串 AttachmentConfigSection configSection = ConfigurationManager.GetSect ...
- LXDE桌面初始设置,Fedora27系统。
一.主题安装主题:方法1.通过软件源安装主题,默认xfce安装的主题有限不一定符合我们的口味. [root@Fedora ~]# dnf search themes #搜索可用主题 通过上面 ...
- 说说第二次配置Ubuntu14.04
任务下达.要装几台linux电脑.并配置能远程--事实上一開始我是拒绝的,内心里百般不想去做.由于干过一次.知道这活儿非常麻烦,这次又有新需求.技术上有非常多还不会.须要花费时间查资料.当时大概预计了 ...