\(noip模拟26\;solutions\)

这个题我做的确实是得心应手,为啥呢,因为前两次考试太难了

T1非常的简单,只不过我忘记了一个定理,

T2就是一个小小的线段树,虽然吧我曾经说过我再也不写树状数组了,但是我看见最长上升子序列就兴奋了

码了个树状数组就溜走了,用时仅为10min,60pts,组合拳

T3我就是nb

\(T1\;神炎皇\)

这个就是一个小小的推式子,让我给你推一推

\(a+b\,|\, a*b\),设\(d=gcd(a,b),x=a/d,y=b/d\),所以x和y互质

我们有\(k*(x+y)\,|\,x*y*d^2<====>(x+y)\,|\,x*y*d\)

因为x,y互质所以(x+y)| d,设(x+y)=k

\(k*d<=n并且k\,|\,d并且k<{d}\),所以这样的d一共有\(\frac{n}{k^2}\)个

这种x与y互质,x+y为定值,你发现x与x+y也是互质的,所以每一个k对应的x+y都有\(\phi(k)\)

k的范围是\(\sqrt{n}\)

那么接下来的事就只剩下线性筛了;

AC_code

#include<bits/stdc++.h>
using namespace std;
#define re register int
#define ll long long
const int N=1e7+5;
ll n,ans,sn;
int p[N],cnt,f[N];
bool vis[N];
signed main(){
scanf("%lld",&n);
sn=sqrt(n);
//memset(vis,1,sizeof(vis));
//cout<<vis[1]<<endl;
for(re i=2;i<=sn;i++){
if(!vis[i])p[++cnt]=i,f[i]=i-1;
for(re j=1;j<=cnt&&p[j]*i<=sn;j++){
vis[p[j]*i]=true;
if(i%p[j]==0){
f[i*p[j]]=f[i]*p[j];
break;
}
else f[i*p[j]]=f[i]*f[p[j]];
}
}
for(re i=1;i<=sn;i++){
ans+=f[i]*(n/i/i);
}
printf("%lld",ans);
}


\(T2\;降雷皇\)

这个题真的是简单极了,我也没想到会有这么简单的题,打了个60分的组合拳就走了

最后发现这个用线段树维护一下就好了

毕竟是动态开点,而且这个电阻值只有1e5,完全不需要离散化,

对于每一种长度也就是最长上升子序列的长度建立一个线段树,

线段树的下标是电阻值,因为你查询的时候是按照电阻值来查询的

线段树中维护的权值即为方案数,这样遍历一遍这个序列,\(O(nlogn)\)就可以解决方案数了

最后直接输出最长长度的线段树的所有权值加和,说白了就是根节点的sum

AC_code

#include<bits/stdc++.h>
using namespace std;
#define re register int
const int N=1e5+5;
const int mod=123456789;
int n,typ,ans1,ans2;
int omu[N],f[N],sum[N];
struct SZSZ{
int tr[N];
int lb(int x){return x&(-x);};
void ins(int x,int v){
for(re i=x;i<=1e5;i+=lb(i))
tr[i]=max(tr[i],v);
}
int query(int x){
int ret=0;
for(re i=x;i;i-=lb(i))
ret=max(ret,tr[i]);
return ret;
}
}sz;
int dp[N];
struct XDS{
int ls[N*80],rs[N*80];
int sum[N*80];
int seg;
void pushup(int x){
sum[x]=(sum[ls[x]]+sum[rs[x]])%mod;
return ;
}
void ins(int &x,int l,int r,int pos,int v){
if(!x)x=++seg;
if(l==r){
sum[x]=(sum[x]+v)%mod;
return ;
}
int mid=l+r>>1;
if(pos<=mid)ins(ls[x],l,mid,pos,v);
else ins(rs[x],mid+1,r,pos,v);
pushup(x);return ;
}
int query(int x,int l,int r,int ql,int qr){
if(!x)return 0;
if(ql<=l&&r<=qr)return sum[x];
int mid=l+r>>1,ret=0;
if(ql<=mid)ret=(ret+query(ls[x],l,mid,ql,qr))%mod;
if(qr>mid)ret=(ret+query(rs[x],mid+1,r,ql,qr))%mod;
return ret;
}
}xds;
int rt[N];
signed main(){
scanf("%d%d",&n,&typ);
for(re i=1;i<=n;i++){
scanf("%d",&omu[i]);
dp[i]=sz.query(omu[i]-1)+1;
ans1=max(ans1,dp[i]);
sz.ins(omu[i],dp[i]);
//cout<<omu[i]<<" "<<dp[i]<<endl;
}
printf("%d\n",ans1);
if(typ==1){
int R=1e5+1,mn=0x3f3f3f3f;
for(re i=1;i<=n;i++){
int tmp=xds.query(rt[dp[i]-1],1,R,1,omu[i]-1);
if(mn>=omu[i]&&tmp==0)tmp=1,mn=omu[i];
xds.ins(rt[dp[i]],1,R,omu[i],tmp);
}
printf("%d",xds.query(rt[ans1],1,R,1,R));
}
}


\(T3\;幻魔皇\)

这整一棵树都充斥这非波那契数列,真的就直接倒就好了

其实还有更简单的\(O(n^2)\)做法还比我的简单,比我的快

去看别人的博客吧,我这个非常难理解,

主要思路就是,首先枚举每一层,每一层的黑色节点和白色节点的类型都是一样的

黑色节点直接枚举左右儿子就行,白色节点就是直接用自己连接自己子树中的白色节点

注意黑色子树中有一个不符合规律的,就是这个黑色节点的白儿子,把这个拎出来单独算

AC_code

#include<bits/stdc++.h>
using namespace std;
#define re register int
const int N=5e3+5;
const int mod=123456789;
int fb[N],ffb[N][N*2],ans[N*2],n;
signed main(){
scanf("%d",&n);
fb[1]=1;fb[2]=1;
for(re i=3;i<=5000;i++)
fb[i]=(fb[i-1]+fb[i-2])%mod;
for(re i=2;i<=n;i++){
for(re j=1;j<=2*n;j++)
ffb[i][j]=(ffb[i][j]+ffb[i-1][j])%mod;
for(re j=3;j<=n;j++){
//if(i==4&&j==3)cout<<ffb[j][i+j]<<" "<<i+j<<endl;
ffb[max(j,i)][i+j]+=1ll*fb[i-1]*fb[j-2]%mod;
ffb[max(j,i)][i+j]%=mod;
//if(i==4&&j==3)cout<<ffb[j][i+j]<<endl;
}
}
//cout<<ffb[4][7]<<endl;
for(re i=2;i<=n;i++){
for(re j=5;j<=2*(n-i);j++){
ans[j]+=1ll*fb[i-1]*ffb[n-i][j]%mod;
ans[j]%=mod;
}
for(re j=i+2;j<=n;j++){
ans[j-i+1]+=1ll*fb[i-1]*fb[j-i-1]%mod;
ans[j-i+1]%=mod;
}
for(re j=i+2;j<=n;j++){
ans[j-i]+=1ll*fb[i-2]*fb[j-i-1]%mod;
ans[j-i]%=mod;
}
}
for(re j=3;j<=n;j++){
ans[j-1]+=fb[j-2];
ans[j-1]%=mod;
}
for(re i=1;i<=2*n;i++)printf("%d ",ans[i]);
}


noip模拟26[肾炎黄·酱累黄·换莫黄]的更多相关文章

  1. [考试总结]noip模拟26

    首先看到这样中二的题目心头一震.... 然而发现又是没有部分分数的一天. 然而正解不会打.... 那还是得要打暴力. 但是这套题目有两个题目只有一个参数. 所以... (滑稽).jpg 然后我就成功用 ...

  2. 2021.7.28考试总结[NOIP模拟26]

    罕见的又改完了. T1 神炎皇 吸取昨天三个出规律的教训,开场打完T2 20pts直接大力打表1h. 但怎么说呢,我不懂欧拉函数.(其实exgcd都忘了 于是只看出最大平方因子,不得不线性筛,爆拿60 ...

  3. NOIP模拟 26

    我辛辛苦苦敲了3.5h的码 得分和一份8B的码一样多 自闭555. T1 marshland 最小费用可行流, 板子不会,建图更不会. 当然是用暴搜得到0分的好成绩啦 补了补板子. %了%RNB. 学 ...

  4. NOIP模拟26

    把题解沽了好久了,今天还是不想写,我们靠的B卷其实挺水的,但是我就是想吐槽一下!咋还带题目里面放题解的?题里一点题解的线索都没有,但是玄机竟然在题目里! 我也是醉了,T1就是一个贪心,题目说贪婪,T2 ...

  5. HZOJ 20190819 NOIP模拟26题解

    考试过程: 照例开题,然后觉得三道题都挺难,比昨天难多了(flag×1),T1 dp?T2 数据结构? T3 dp?事实证明我是sb然后决定先搞T2,但是,woc,这题在说什么啊,我怎么看不懂题啊,连 ...

  6. [NOIP模拟26]题解

    今天的考试题改自闭了……所以滚来写陈年题解. A.*****贪婪***** RT,出题人告诉我们这题要贪心. 最优的策略一定是拖到必须断的时候再断开(虽然并不知道为什么). 如果一段序列满足题目中的性 ...

  7. NOIP 模拟 $26\; \rm 幻魔皇$

    题解 \(by\;zj\varphi\) 观察可发现一个点向它的子树走能到的白点,黑点数是一个斐波那契数列. 对于白色点对,可以分成两种情况: 两个白点的 \(lca\) 是其中一个白点 两个白点的 ...

  8. NOIP 模拟 $26\; \rm 降雷皇$

    题解 \(by\;zj\varphi\) 用树状数组优化一下求最长上升子序列即可. 至于第二问,在求出答案后开 \(n\) 棵线段树,每颗维护当前最长上升子序列长度的方案数. Code #includ ...

  9. NOIP 模拟 $26\; \rm 神炎皇$

    题解 \(by\;zj\varphi\) 一道 \(\varphi()\) 的题. 对于一个合法的数对,设它为 \((a*m,b*m)\) 则 \(((a+b)*m)|a*b*m^2\),所以 \(( ...

随机推荐

  1. ieda引入jstl后报错解决办法

    报错如下: HTTP Status 500 - The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in ei ...

  2. Spring Cloud10:Zipkin 服务跟踪

    一.概述 为什么要有服务跟踪,分布式系统中有很多个服务在相互调用,调用关系是错综复杂的,如果这时出现了问题,我们在进行问题排查的时候,或者在优化架构的时候,工作量就比较大,这时候就需要我们能够准确的跟 ...

  3. Qt信号槽机制理解

    1. 信号和槽概述 > 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式(发布-订阅模式).当某个`事件`发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(s ...

  4. 小白学k8s(9)-gitlab-runner实现go项目的自动化发布

    gitlab构建CI/CD 准备 docker部署gitlab 使用二进制部署gitlab-runner gitlab-runner注册 配置Variables 简单先来个测试 开始构建 遇到的报错 ...

  5. 性能工具之linux三剑客awk、grep、sed详解

    前言 linux 有很多工具可以做文本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, he ...

  6. 把新建的vue项目上传到码云

    1:在码云上建一个仓库(使用Readme文件初始化这个项目的勾取消掉) 2:在项目文件中打开git命令窗口(如下图),命令git init 初始化git仓库 运行之后有一个.git文件夹 现在用vsc ...

  7. 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  8. DHCP的简单介绍与配置

    一.DHCP简介 二.DHCP报文类型 三.DHCP工作原理 四.实例操作 一.DHCP简介 DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,是一 ...

  9. 乘风破浪,遇见Visual Studio 2022预览版(Preview),宇宙最强开发者工具首次迎来64位版本

    简介 众所周知,我们从官方新闻来看,对Visual Studio 2022最大的期待莫过于:其是首个64位的Visual Studio,这个宇宙最强开发者工具一脚迈入了新的阶段. https://vi ...

  10. 诸多改进!Superset 1.2.0 正式发布!

    Apache Superset 是一个现代的.企业级的轻量BI平台,提供了大量数据可视化组件. 距离superset上一个版本发布已经过了近三个月的时间,我们终于等到了1.2.0版本. 之前就曾提到过 ...