HZOI20190803 A,C题
题目链接: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题的更多相关文章
- HZOI20190803 B题
题目:https://www.cnblogs.com/Juve/articles/11295333.html 话说这题方法挺多 40分:暴力 65:莫队,你会T得飞起 我考场上没打出带修莫队,没有修改 ...
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- 【Java每日一题】20170106
20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170105
20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170104
20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170103
20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- SQL面试笔试经典题(Part 1)
本文是在Cat Qi的原贴的基础之上,经本人逐题分别在MySql数据库中实现的笔记,持续更新... 参考原贴:http://www.cnblogs.com/qixuejia/p/3637735.htm ...
- 刷LeetCode的正确姿势——第1、125题
最近刷LeetCode比较频繁,就购买了官方的参考电子书 (CleanCodeHandbook),里面有题目的解析和范例源代码,可以省去非常多寻找免费经验分享内容和整理这些资料的时间.惊喜的是,里面的 ...
- AWS的SysOps认证考试样题解析
刚考过了AWS的developer认证,顺手做了一下SysOps的样题.以下是题目和答案. When working with Amazon RDS, by default AWS is respon ...
随机推荐
- scala中异常捕获与处理简单使用
import java.io.IOException /** * 异常捕获与处理 */ object excepitonUse { def main(args: Array[String]): Uni ...
- thinkphp ajax返回
ThinkPHP可以很好的支持AJAX请求,系统的\Think\Controller类提供了ajaxReturn方法用于AJAX调用后返回数据给客户端.并且支持JSON.JSONP.XML和EVAL四 ...
- php算法题---对称的二叉树
php算法题---对称的二叉树 一.总结 一句话总结: 可以在isSymmetrical()的基础上再加一个函数comRoot,函数comRoot来做树的递归判断 /*思路:首先根节点以及其左右子树, ...
- VS2010-MFC(菜单:VS2010菜单资源详解)
转自:http://www.jizhuomi.com/software/210.html 上一节讲了标签控件Tab Control以后,常用控件的内容就全部讲完了,当然并没有包括所有控件,主要是一些很 ...
- UVA-11987-Almost Union-Find-并查集的基本操作合并、删除、移位
I hope you know the beautiful Union-Find structure. In this problem, you’re to implement something s ...
- selenium基础(下拉菜单操作)
selenium基础(下拉菜单操作) 非select/option元素: 1.触发下拉列表出现 2.等待下拉列表中的元素出现,然后进行选择元素即可. select/option元素: 下拉框操作-Se ...
- JS流程控制语句 重复重复(for循环)语句结构: for(初始化变量;循环条件;循环迭代) { 循环语句 }
重复重复(for循环) 很多事情不只是做一次,要重复做.如打印10份试卷,每次打印一份,重复这个动作,直到打印完成.这些事情,我们使用循环语句来完成,循环语句,就是重复执行一段代码. for语句结构: ...
- T2960 全民健身【思维Dp,预处理,差分优化】
Online Judge:YCJSOI Label:Dp,思维题,预处理,滚动优化 题目描述 乐乐现在掌管一个大公司,办公楼共有n层.为了增加员工的身体素质,他决定在每层楼都建立一个活动室,活动室分乒 ...
- OpenGL键盘交互响应事件
GLUT允许我们编写程序,在里面加入键盘输入控制,包括了普通键,和其他特殊键(如F1,UP).在这一章里我们将学习如何去检测哪个键被按下,可以从GLUT里得到些什么信息,和如何处理键盘输入. 处理 ...
- soj98 卡牌
题意:一共有n张牌,每张牌有三个属性ai,bi,ci.问在属性上限为A,B,C的所有牌中有多少张牌满足至少有两个属性可以完全压制(严格大于)那n张牌? n<=50W. 标程: #include& ...