NOIP模拟测试12
T1 斐波那契
一道找规律题,被我做成了贼难的题。
观察图片可知x=f[i-1]+j。(j为x的父亲)且j<=f[i-1],然后就二分找父亲没了。
- #include<bits/stdc++.h>
- #define ll long long
- using namespace std;
- const int mod=;
- ll f[];
- struct Hush{
- int head[],nxt[],cnt;
- ll to[];
- void insert(ll x)
- {
- int k=x%mod;
- to[++cnt]=x;
- nxt[cnt]=head[k];
- head[k]=cnt;
- return ;
- }
- bool find(ll x)
- {
- int k=x%mod;
- for(int i=head[k];i;i=nxt[i])if(to[i]==x)return ;
- return ;
- }
- void clear()
- {
- memset(head,,sizeof(head));
- cnt=;
- }
- }H;
- ll Getlca(ll a,ll b)
- {
- if(a>b)swap(a,b);
- H.clear();
- H.insert(a);
- while(a!=)
- {
- ll fa=lower_bound(f+,f+,a)-f;
- fa=a-f[fa-];
- H.insert(fa);
- a=fa;
- }
- if(H.find(b))return b;
- while(b!=)
- {
- ll fb=lower_bound(f+,f+,b)-f;
- fb=b-f[fb-];
- if(H.find(fb))return fb;
- b=fb;
- }
- }
- int main()
- {
- f[]=;f[]=;
- for(int i=;i<=;i++)f[i]=f[i-]+f[i-];
- int m;
- scanf("%d",&m);
- for(int i=;i<=m;i++)
- {
- ll a,b;
- scanf("%lld%lld",&a,&b);
- printf("%lld\n",Getlca(a,b));
- }
- return ;
- }
T2 水题不说了
T3 分组
一道好题。
k=1:
以前做过一道菜肴制作,然后就可以知道:区间越往后放,就越靠前。然后就维护最长的区间即可
k=2:
用扩展域并查集,直接维护,特判很恶心。
- #include<bits/stdc++.h>
- #define MAXN 333333
- using namespace std;
- int nxt[MAXN],a[MAXN],pf[MAXN],dr[MAXN],f[MAXN];
- bool vst[MAXN];
- vector<int>ans,cl;
- inline int find(int x)
- {
- return f[x]==x?x:f[x]=find(f[x]);
- }
- inline void merge(int x,int y)
- {
- int fa=find(x),fb=find(y);
- f[fa]=fb;
- return ;
- }
- void bcj_clear(int l,int r)
- {
- for(int i=l;i<=r;i++)f[a[i]]=a[i],vst[a[i]]=,dr[a[i]]=;
- cl.clear();
- return ;
- }
- int main()
- {
- int n,k,maxa=;
- scanf("%d%d",&n,&k);
- for(int i=;i<=n;i++)
- {
- scanf("%d",&a[i]);
- maxa=max(maxa,a[i]);
- }
- int ed=n;
- for(int i=;i<=;i++)pf[i]=i*i;
- if(k==)
- {
- for(int i=n;i>=;i--)
- {
- bool ok=;
- for(int j=sqrt(maxa*);j>=&&pf[j]>=a[i];j--)
- if(vst[pf[j]-a[i]]){ok=;break;}
- if(!ok){
- ed=i;
- for(int k=;k<cl.size();k++)
- vst[cl[k]]=;
- cl.clear();
- ans.push_back(i);
- }
- vst[a[i]]=;
- cl.push_back(a[i]);
- }
- if(!ans.size())printf("1\n");
- cout<<ans.size()+<<endl;
- for(int i=ans.size()-;i>=;i--)
- printf("%d ",ans[i]);
- return ;
- }
- else
- {
- int last=n;
- for(int i=;i<=maxa*;i++)f[i]=i;
- for(int i=n;i>=;i--)
- {
- bool ok=;
- for(int j=sqrt(maxa*);j>=&&pf[j]>=a[i];j--)
- {
- if(vst[pf[j]-a[i]]&&!vst[a[i]])
- {
- // cout<<i<<"---"<<endl;
- int now=pf[j]-a[i];
- if(find(a[i])==find(now)){ok=;break;}
- if(!dr[now])dr[now]=a[i];
- else if(dr[now]!=now)merge(dr[now],a[i]);
- else {ok=;break;}
- if(!dr[a[i]])dr[a[i]]=now;
- else if(dr[a[i]]!=a[i])merge(dr[a[i]],now);
- else {ok=;break;}
- }
- else if(vst[pf[j]-a[i]]&&a[i]==pf[j]-a[i])
- {
- // cout<<i<<' '<<dr[a[i]]<<endl;
- if(dr[a[i]]){ok=;break;}
- else dr[a[i]]=a[i];
- //cout<<i<<' '<<a[i]<<")S"<<endl;
- }
- }
- if(!ok){
- ed=i;
- bcj_clear(i,last);
- last=i;
- ans.push_back(i);
- }
- vst[a[i]]=;
- cl.push_back(a[i]);
- }
- if(!ans.size()){printf("1\n");return ;}
- cout<<ans.size()+<<endl;
- for(int i=ans.size()-;i>=;i--)
- printf("%d ",ans[i]);
- return ;
- }
- }
主要反思一下:
考试策略不好,时间分配不合理,难度评估sb 认为T1最难,T3最水?????????
端正心态,不要去刚题,但也不要轻易放弃(暴力还是要打的)
NOIP模拟测试12的更多相关文章
- 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组
2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色
2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)
2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...
- 2019.8.3 NOIP模拟测试12 反思总结【P3938 斐波那契,P3939 数颜色,P3940 分组】
[题解在下面] 早上5:50,Gekoo同学来到机房并表态:“打暴力,打暴力就对了,打出来我就赢了.” 我:深以为然. (这是个伏笔) 据说hzoi的人还差两次考试[现在是一次了]就要重新分配机房,不 ...
- 20190803 NOIP模拟测试12「斐波那契(fibonacci)· 数颜色 · 分组 」
164分 rank11/64 这次考的不算太差,但是并没有多大的可能性反超(只比一小部分人高十几分而已),时间分配还是不均,T2两个半小时,T1半个小时,T3-额十几分钟吧 然额付出总是与回报成反比的 ...
- [NOIP模拟测试12]题解
A. 找规律题.儿子的编号减去 小于它编号的最大的fibonacci数 即可得到它父亲的编号. 然后两个节点都暴力上跳就好了.预处理一下fibonacci数,每次二分查找即可. #include< ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- 2019.8.1 NOIP模拟测试11 反思总结
延迟了一天来补一个反思总结 急匆匆赶回来考试,我们这边大家的状态都稍微有一点差,不过最后的成绩总体来看好像还不错XD 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...
- NOIP模拟测试17&18
NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...
随机推荐
- Django学习之文件下载
在实际的项目中很多时候需要用到下载功能,如导excel.pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载. 我们这里 ...
- C语言I博客作业03
这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8717 我在这个课程的目 ...
- bugku--web--输入密码查看flag
首先打开网页链接 随机五位数的密码爆破,先用python写一个脚本来生成随机五位数: x=range(0,10) f=open("3.txt",'w') for i in x: f ...
- CentOS 7 的 systemctl 命令
Centos 7.* 使用 Systemd 进行系统初始化,因此,Centos 7.* 中我们可以使用 systemctl 管理系统中的服务. systemctl 管理的服务均包含了一个以 .serv ...
- ES三节点重启后报错no known master node
问题 一直在研究ES的监控怎么做,想偷点懒,不去通过API获取然后计算,就想找个现成的插件或者监控软件,只要装个agent就可以,然后就找到了x-pack,插件装好了之后,需要重启ES集群,线上的ES ...
- django后台管理-admin
0922自我总结 django后台管理-admin 一.模型注册 admin.py 注册方式一: #在对于注册的app中的admin文件中导入模型然后注册模型 admin.site.register( ...
- u盘安装操作系统相关
首先使用相关软件制作u盘启动盘,将所需要的系统镜像安装到u盘中 此时u盘中会出现一个EFI区(window可以看到,window7看不到,可以隐藏) 简单来说这个EFI分区中装的是一个低价的操作系统, ...
- vue中 props 多层组件嵌套传值
如:三层嵌套. 父组件=>子组件=>孙子 1. 父组件引用子组件component11 , isShow传值给子组件component11 2. 子组件用 props 接受父组件的值, ...
- shark恒破解笔记4-API断点GetPrivateProfileStringA
这小节是通过断在GetPrivateProfileStringA,然后找到注册码的. 1.运行程序输入假码111111,提示重启.通过这判断这是一个重启来验证的,那么它是如何来验证的呢?观察程序目录下 ...
- 基于canvas实现钟表
原理说明 1.通过arc方法实现钟表外环: 2.通过line实现钟表时针,分针,秒针和刻度标志的绘制,基于save和restore方法旋转画布绘制不同角度的指针: 3.通过font方法实现在画布上绘制 ...