题目链接: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. cocos2D-X 常用功能封装

    Packaging_Kernel.h #pragma once #include <string> #include <map> #include <vector> ...

  2. 免费带你体验阿里巴巴旗舰大数据计算产品MaxCompute

    什么是MaxCompute? 众所周知,MaxCompute是阿里云推出的承载EB级的数据存储能力,百PB级的单日计算能力,公共云覆盖国内外十几个国家和地区,专有云包含城市大脑在内部署超过100+套的 ...

  3. truncate和delete的区别

    TRUNCATE 命令用法 语法    TRUNCATE TABLE name 参数  name 是要截断的表的名称或要删除其全部行的表的名称. 注释 TRUNCATE TABLE 在功能上与不带 W ...

  4. (转) Mac下面的SecureCRT(附破解方案) 更新到最新的7.3.7

    Mac下面的SecureCRT(附破解方案) 更新到最新的7.3.7 转自 http://blog.csdn.net/skykingf/article/details/17450561 http:// ...

  5. Java 高级面试知识点汇总!

    1.常用设计模式 单例模式:懒汉式.饿汉式.双重校验锁.静态加载,内部类加载.枚举类加载.保证一个类仅有一个实例,并提供一个访问它的全局访问点. 代理模式:动态代理和静态代理,什么时候使用动态代理. ...

  6. 使用maven搭建Hibernate

    使用maven搭建Hibernate框架(web项目) create table USERS ( ID NUMBER not null primary key, NAME ), PASSWORD ), ...

  7. POJ - 2774~POJ - 3415 后缀数组求解公共字串问题

    POJ - 2774: 题意: 求解A,B串的最长公共字串 (摘自罗穗骞的国家集训队论文): 算法分析: 字符串的任何一个子串都是这个字符串的某个后缀的前缀. 求 A 和 B 的最长 公共子串等价于求 ...

  8. 华为手机honor5c root 方法备份

    1.首先获取官方解锁码: https://www.emui.com/cn/unlock_detail 2.用 adb 执行 root 命令,如下: 498  adb devies 499  adb d ...

  9. LUA中的冒号、点和self

    在Lua编程中,经常会看到有时用点号定义一个table的成员函数,有时却用冒号,在调用的时候也是如此.那么点号和冒号在使用上有什么区别呢?它们与self之间又是什么样的关系呢?稍安勿躁,接下来谜底将一 ...

  10. (转)nginx配置location总结及rewrite规则写法

    注: rewrite 只能对域名后边的除去传递的参数外的字符串起作用,并且要写全域名后面的部分,如: http://i.com:9090/php/midou/admin.php/index/login ...