noip模拟26[肾炎黄·酱累黄·换莫黄]
\(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[肾炎黄·酱累黄·换莫黄]的更多相关文章
- [考试总结]noip模拟26
首先看到这样中二的题目心头一震.... 然而发现又是没有部分分数的一天. 然而正解不会打.... 那还是得要打暴力. 但是这套题目有两个题目只有一个参数. 所以... (滑稽).jpg 然后我就成功用 ...
- 2021.7.28考试总结[NOIP模拟26]
罕见的又改完了. T1 神炎皇 吸取昨天三个出规律的教训,开场打完T2 20pts直接大力打表1h. 但怎么说呢,我不懂欧拉函数.(其实exgcd都忘了 于是只看出最大平方因子,不得不线性筛,爆拿60 ...
- NOIP模拟 26
我辛辛苦苦敲了3.5h的码 得分和一份8B的码一样多 自闭555. T1 marshland 最小费用可行流, 板子不会,建图更不会. 当然是用暴搜得到0分的好成绩啦 补了补板子. %了%RNB. 学 ...
- NOIP模拟26
把题解沽了好久了,今天还是不想写,我们靠的B卷其实挺水的,但是我就是想吐槽一下!咋还带题目里面放题解的?题里一点题解的线索都没有,但是玄机竟然在题目里! 我也是醉了,T1就是一个贪心,题目说贪婪,T2 ...
- HZOJ 20190819 NOIP模拟26题解
考试过程: 照例开题,然后觉得三道题都挺难,比昨天难多了(flag×1),T1 dp?T2 数据结构? T3 dp?事实证明我是sb然后决定先搞T2,但是,woc,这题在说什么啊,我怎么看不懂题啊,连 ...
- [NOIP模拟26]题解
今天的考试题改自闭了……所以滚来写陈年题解. A.*****贪婪***** RT,出题人告诉我们这题要贪心. 最优的策略一定是拖到必须断的时候再断开(虽然并不知道为什么). 如果一段序列满足题目中的性 ...
- NOIP 模拟 $26\; \rm 幻魔皇$
题解 \(by\;zj\varphi\) 观察可发现一个点向它的子树走能到的白点,黑点数是一个斐波那契数列. 对于白色点对,可以分成两种情况: 两个白点的 \(lca\) 是其中一个白点 两个白点的 ...
- NOIP 模拟 $26\; \rm 降雷皇$
题解 \(by\;zj\varphi\) 用树状数组优化一下求最长上升子序列即可. 至于第二问,在求出答案后开 \(n\) 棵线段树,每颗维护当前最长上升子序列长度的方案数. Code #includ ...
- NOIP 模拟 $26\; \rm 神炎皇$
题解 \(by\;zj\varphi\) 一道 \(\varphi()\) 的题. 对于一个合法的数对,设它为 \((a*m,b*m)\) 则 \(((a+b)*m)|a*b*m^2\),所以 \(( ...
随机推荐
- ieda引入jstl后报错解决办法
报错如下: HTTP Status 500 - The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in ei ...
- Spring Cloud10:Zipkin 服务跟踪
一.概述 为什么要有服务跟踪,分布式系统中有很多个服务在相互调用,调用关系是错综复杂的,如果这时出现了问题,我们在进行问题排查的时候,或者在优化架构的时候,工作量就比较大,这时候就需要我们能够准确的跟 ...
- Qt信号槽机制理解
1. 信号和槽概述 > 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式(发布-订阅模式).当某个`事件`发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(s ...
- 小白学k8s(9)-gitlab-runner实现go项目的自动化发布
gitlab构建CI/CD 准备 docker部署gitlab 使用二进制部署gitlab-runner gitlab-runner注册 配置Variables 简单先来个测试 开始构建 遇到的报错 ...
- 性能工具之linux三剑客awk、grep、sed详解
前言 linux 有很多工具可以做文本处理,例如:sort, cut, split, join, paste, comm, uniq, column, rev, tac, tr, nl, pr, he ...
- 把新建的vue项目上传到码云
1:在码云上建一个仓库(使用Readme文件初始化这个项目的勾取消掉) 2:在项目文件中打开git命令窗口(如下图),命令git init 初始化git仓库 运行之后有一个.git文件夹 现在用vsc ...
- 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- DHCP的简单介绍与配置
一.DHCP简介 二.DHCP报文类型 三.DHCP工作原理 四.实例操作 一.DHCP简介 DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,是一 ...
- 乘风破浪,遇见Visual Studio 2022预览版(Preview),宇宙最强开发者工具首次迎来64位版本
简介 众所周知,我们从官方新闻来看,对Visual Studio 2022最大的期待莫过于:其是首个64位的Visual Studio,这个宇宙最强开发者工具一脚迈入了新的阶段. https://vi ...
- 诸多改进!Superset 1.2.0 正式发布!
Apache Superset 是一个现代的.企业级的轻量BI平台,提供了大量数据可视化组件. 距离superset上一个版本发布已经过了近三个月的时间,我们终于等到了1.2.0版本. 之前就曾提到过 ...