题目链接:https://www.cnblogs.com/Juve/articles/11295333.html

A:

考场上只有70分。。。

发现几个性质:特殊性质1:在两条链上,看它是fib第几项,同为奇数项或偶数项就输出小的,否则输出1

特殊性质2:a==b,输出a,否则输出1

你就70啦:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cmath>
#define MAXN 300005
#define int long long
#define re register
using namespace std;
int m,anc[16][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{0,1,2,1,1,2,1,2,1,1,2,1,1,2,1,2},{0,1,1,3,1,1,1,1,3,1,1,3,1,1,1,1},{0,1,1,1,4,1,1,1,1,1,1,1,4,1,1,1},{0,1,2,1,1,5,1,2,1,1,2,1,1,5,1,2},{0,1,1,1,1,1,6,1,1,1,1,1,1,1,1,1},{0,1,2,1,1,2,1,7,1,1,2,1,1,2,1,2},{0,1,1,3,1,1,1,1,8,1,1,3,1,1,1,1},{0,1,1,1,1,1,1,1,1,9,1,1,1,1,1,1},{0,1,2,1,1,2,1,2,1,1,10,1,1,2,1,2},{0,1,1,3,1,1,1,1,3,1,1,11,1,1,1,1},{0,1,1,1,4,1,1,1,1,1,1,1,12,1,1,1},{0,1,2,1,1,5,1,2,1,1,2,1,1,13,1,2},{0,1,1,1,1,1,1,1,1,1,1,1,1,1,14,1},{0,1,2,1,1,2,1,2,1,1,2,1,1,2,1}};
int fib[65];
signed main(){
scanf("%lld",&m);
if(m<=12){
for(re int i=1,a,b;i<=m;i++){
scanf("%lld%lld",&a,&b);
printf("%lld\n",anc[a][b]);
}
return 0;
}
fib[0]=fib[1]=1;
for(re int i=2;i<=60;i++){
fib[i]=fib[i-1]+fib[i-2];
//cout<<fib[i]<<endl;
//if(fib[i]>1e12){
// cout<<i<<endl;
// break;
//}
}
for(re int i=1,a,b;i<=m;i++){
scanf("%lld%lld",&a,&b);
if(a==b) printf("%lld\n",a);
else if(abs(a-b)==1) puts("1");
else{
re int aa=0,bb=0;
for(re int j=1;j<=60;j++){
if(fib[j]==a){
aa=j;
}
if(fib[j]==b){
bb=j;
}
if(aa*bb!=0) break;
}
if((aa&1)==(bb&1)){
printf("%lld\n",fib[min(aa,bb)]);
}else puts("1");
}
}
return 0;
}

然而。。。

打正解:

100 分做法: 我们来研究一下这个神秘的力量: 依次写下兔子们的标号和他们父亲(从 2 开始): 1 1 1 2 1 2 3 1 2 3 4 5 …  发现其实一定是许多连续段的从 1 开始的序列组合到一起,每段长度依次是斐波那契数列里面的每一项。

于是我们发现,对于$fib(i)<=x<=fib(i+1),father(x)=x-fib(i)$

所以我们可以像lca一样,一个一个向上跳

因为$fib(60)>1e12$,所以复杂度可以接受

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
#define re register
using namespace std;
ll m,fib[];
void get_lca(ll a,ll b){
if(a<b) swap(a,b);
if(a==b){
printf("%lld\n",a);
return ;
}
ll aa=lower_bound(fib+,fib++,a)-fib;
get_lca(b,a-fib[aa-]);
}
signed main(){
scanf("%lld",&m);
fib[]=fib[]=;
for(re int i=;i<=;i++)
fib[i]=fib[i-]+fib[i-];
for(ll i=,a,b;i<=m;i++){
scanf("%lld%lld",&a,&b);
get_lca(a,b);
}
return ;
}

C:

留坑

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<stack>
#define MAXN 131075
#define MAXM 500005
#define re register
using namespace std;
int n,k,a[MAXN],mx=0,v[MAXM],ans=1,x,y,enemy[MAXM];
bool is_sq[MAXM];
stack<int>sta;
int fa[MAXN];
int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
}
signed main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
mx=max(mx,a[i]);
}
mx=sqrt(2*mx);
for(int i=2;i<=512;i++)
is_sq[i*i]=1;
if(k==1){
for(int i=n;i>=1;i--){
for(int j=mx;j>=2&&j*j>a[i];j--)
if(v[j*j-a[i]]==ans){
sta.push(i);
ans++;
break;
}
v[a[i]]=ans;
}
printf("%d\n",ans);
while(!sta.empty()){
printf("%d ",sta.top());
sta.pop();
}
puts("");
return 0;
}
for(int i=1;i<=MAXN-3;i++)
fa[i]=i;
for(int i=n;i>=1;i--){
for(int j=mx;j>=2&&j*j>a[i];j--){
if(v[j*j-a[i]]==sta.size()+1){
int p=j*j-a[i];
if(a[i]==p){
if(enemy[a[i]]){
for(int t=i;t<=(sta.empty()?n:sta.top());t++)
fa[a[t]]=a[t],enemy[a[t]]=0;
sta.push(i);
break;
}else enemy[a[i]]=p;
}else{
if((find(a[i])==find(p)&&a[i]!=p)||enemy[p]==p){
for(int t=i;t<=(sta.empty()?n:sta.top());t++)
fa[a[t]]=a[t],enemy[a[t]]=0;
sta.push(i);
break;
}
if(enemy[a[i]]){
x=find(enemy[a[i]]),y=find(p);
fa[x]=y;
}else enemy[a[i]]=p;
if(enemy[p]){
x=find(a[i]),y=find(enemy[p]);
fa[x]=y;
}else enemy[p]=a[i];
}
}
}
v[a[i]]=sta.size()+1;
}
printf("%d\n",sta.size()+1);
while(!sta.empty()){
printf("%d ",sta.top());
sta.pop();
}
puts("");
return 0;
}

HZOI20190803 A,C题的更多相关文章

  1. HZOI20190803 B题

    题目:https://www.cnblogs.com/Juve/articles/11295333.html 话说这题方法挺多 40分:暴力 65:莫队,你会T得飞起 我考场上没打出带修莫队,没有修改 ...

  2. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  3. 【Java每日一题】20170106

    20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  4. 【Java每日一题】20170105

    20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  5. 【Java每日一题】20170104

    20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  6. 【Java每日一题】20170103

    20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  7. SQL面试笔试经典题(Part 1)

    本文是在Cat Qi的原贴的基础之上,经本人逐题分别在MySql数据库中实现的笔记,持续更新... 参考原贴:http://www.cnblogs.com/qixuejia/p/3637735.htm ...

  8. 刷LeetCode的正确姿势——第1、125题

    最近刷LeetCode比较频繁,就购买了官方的参考电子书 (CleanCodeHandbook),里面有题目的解析和范例源代码,可以省去非常多寻找免费经验分享内容和整理这些资料的时间.惊喜的是,里面的 ...

  9. AWS的SysOps认证考试样题解析

    刚考过了AWS的developer认证,顺手做了一下SysOps的样题.以下是题目和答案. When working with Amazon RDS, by default AWS is respon ...

随机推荐

  1. jvm虚拟内存分布 与 GC算法

    jvm虚拟内存分布 程序计数器(PC寄存器)(线程私有): 每个线程启动的时候,都会创建一个PC(Program Counter,程序计数器)寄存器. PC寄存器的内容总是指向下一条将被执行指令的地址 ...

  2. thinkphp 分布式数据库支持

    ThinkPHP内置了分布式数据库的支持,包括主从式数据库的读写分离,但是分布式数据库必须是相同的数据库类型. 配置DB_DEPLOY_TYPE 为1 可以采用分布式数据库支持.如果采用分布式数据库, ...

  3. hdu多校第二场 1005 (hdu6595) Everything Is Generated In Equal Probability

    题意: 给定一个N,随机从[1,N]里产生一个n,然后随机产生一个n个数的全排列,求出n的逆序数对的数量,加到cnt里,然后随机地取出这个全排列中的一个非连续子序列(注意这个子序列可以是原序列),再求 ...

  4. idea社区版+第一个spring boot项目+增删改查+yml修改端口号

    参考:https://www.cnblogs.com/tanlei-sxs/p/9855071.html 中途出现问题时参考了太多 1.下载idea社区版 2.在settings -> Plug ...

  5. day22_2-sys模块

    # ********************day22_2-sys模块 *******************# ********************day22_2-sys模块 ********* ...

  6. Spring有关面试问题

    问题清单: 什么是Spring框架?Spring框架有哪些主要模块? 使用Spring框架有什么好处? 什么是控制反转(IOC)?什么是依赖注入? 请解释下Spring中的IOC? BeanFacto ...

  7. springmvc 拦截器不拦截jsp,只拦截控制器的访问

    spring是鼓励把jsp放到WEB-INF文件夹中,然后通过控制器进行访问

  8. hive 总结一

    本文参考:黑泽君相关博客 本文是我总结日常工作中遇到的坑,结合黑泽君相关博客,选取.补充了部分内容. 上传数据 上传数据后执行修复 msck 命令 上传数据 hive> dfs -mkdir - ...

  9. java读写属性配置文件

    package readproperties; import java.io.FileInputStream; import java.io.IOException; import java.io.I ...

  10. Input:type属性

    1.button:定义可点击的按钮(通常与 JavaScript 一起使用来启动脚本). <input id="" type="button" name= ...