题面:https://www.cnblogs.com/Juve/articles/11648975.html

神炎皇:

打表找规律?和$\phi$有关?

答案就是$\sum\limits_{i=2}^{n}\phi(i)*\frac{n}{i*i}$

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define int long long
using namespace std;
int n,ans=;
int prime[],tot=,phi[];
bool vis[];
void get_phi(int N){
vis[]=phi[]=;
for(int i=;i<=N;i++){
if(!vis[i]) prime[++tot]=i,phi[i]=i-;
for(int j=;j<=tot&&i*prime[j]<=N;j++){
vis[i*prime[j]]=;
if(!(i%prime[j])){
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
phi[i*prime[j]]=phi[i]*phi[prime[j]];
}
}
}
signed main(){
scanf("%lld",&n);
get_phi(sqrt(n)+);
for(int i=;i<=sqrt(n);++i)
ans+=phi[i]*(n/(i*i));
printf("%lld\n",ans);
return ;
}

降雷皇

基础不牢,地动山摇。。。赶紧补一发LIS

给定序列$a_i$,设f[i]表示以a[i]结尾的最长上升序列长度

则$f[i]=max(f[j]+1)(j<i\&\&a[j]<a[i])$

设g[i]表示以i为结尾的最长上升序列的个数

则有$g[i]=\sum\limits_{j=1}^{i-1}[a[j]<a[i]\&\&f[j]=f[i]-1]*g[j]$

这样就有了$O(n^2)$转移

然后用树状数组加速转移

树状数组下标为权值,顺序扫保证了j<i,树状数组查询a[i]-1保证了a[j]<a[i],然后树状数组即可

当然也可以线段树,原理是一样的

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=1e5+5;
const int mod=123456789;
int n,typ,a[MAXN],mx=0;
pair<int,int>c[MAXN*10],f[MAXN],ans;//changdu,geshu
int lowbit(int x){
return x&(-x);
}
int update(int pos,pair<int,int> val){
for(int i=pos;i<=mx;i+=lowbit(i)){
if(c[i].first<val.first) c[i]=val;
else if(c[i].first==val.first) (c[i].second+=val.second)%=mod;
}
}
pair<int,int> query(int pos){
pair<int,int>res;
res.first=0,res.second=1;
for(int i=pos;i>0;i-=lowbit(i)){
if(res.first<c[i].first) res=c[i];
else if(res.first==c[i].first) (res.second+=c[i].second)%=mod;
}
return res;
}
int main(){
scanf("%d%d",&n,&typ);
for(int i=1;i<=n;++i) scanf("%d",&a[i]),mx=max(mx,a[i]);
for(int i=1;i<=n;++i){
f[i]=query(a[i]-1);
++f[i].first;
update(a[i],f[i]);
if(ans.first<f[i].first) ans=f[i];
else if(ans.first==f[i].first) (ans.second+=f[i].second)%=mod;
}
if(typ==0) printf("%d\n",ans.first);
else printf("%d\n%d\n",ans.first,ans.second);
return 0;
}

幻魔皇:

产生贡献的只有白点,我们按两个白点lca的颜色分类

如果两个白点lca是白点,那么这个白点一定是两个白点中的一个

枚举两个白点的距离,不难发现只有深度在[1,n-i]的白点在它的子树中有距离为i的白点

设sum[i]表示前i层白点个数,w[i]表示第i层白点个数,因为每个白点的子树结构都相同,所以每个白点所在子树中第i层的白点个数都相等

所以贡献就是sum[n-i]*w[i],

如果两个白点的lca是黑点,枚举两个白点到黑点的距离i,j,只有深度为[1,n-max(i,j)]的黑点有贡献

设f[i]表示前i层的黑点个数,那么答案就是f[n-max(i,j)]*w[i]*w[j+1],其中i,j是有顺序的,i表示在黑点的白儿子的子树中的点,j表示在黑点的黑儿子的子树中的点

sum[],w[],f[]用fib递推

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int MAXN=;
const int mod=;
int n,w[MAXN],sum[MAXN],f[MAXN],ans[MAXN<<];
signed main(){
scanf("%lld",&n);
w[]=w[]=w[]=;w[]=;
for(int i=;i<=n;++i) w[i]=(w[i-]+w[i-])%mod;
for(int i=;i<=n;++i) sum[i]=(sum[i-]+w[i])%mod;
f[]=,f[]=f[]=;
for(int i=;i<=n;++i) f[i]=(f[i-]+f[i-])%mod;
for(int i=;i<=n;++i) f[i]=(f[i-]+f[i])%mod;
for(int i=;i<n;++i){
(ans[i]+=(sum[n-i]*w[i+])%mod)%=mod;
for(int j=;j<n;++j)
(ans[i+j]+=f[n-max(i,j)]*w[i]%mod*w[j+]%mod)%=mod;
}
for(int i=;i<=*n;++i) printf("%lld ",ans[i]);
puts("");
return ;
}

csps模拟67神炎皇,降雷皇,幻魔皇题解的更多相关文章

  1. [CSP-S模拟测试]:神炎皇(数学)

    题目描述 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对$(a,b)$,若满足$a+b\leqslant n$且$a+b$是$ab$的因子,则称为神奇的数对.请问这样的数对共有多少呢? ...

  2. NOIP模拟26「神炎皇·降雷皇·幻魔皇」

    T1:神炎皇   又是数学题,气死,根本不会.   首先考虑式子\(a+b=ab\),我们取\(a\)与\(b\)的\(gcd\):\(d\),那么式子就可以改写成: \[(a'+b')*d=a'b' ...

  3. 「10.10」神炎皇(欧拉函数)·降雷皇(线段树,DP)·幻魔皇

    A. 神炎皇 很好的一道题,可能第一次在考场上遇到欧拉函数 题意:对于一个整数对 $(a,b)$,若满足 $a\times b\leq n$且$a+b$是$a\times b$的因子, 则称为神奇的数 ...

  4. CSPS模拟 67

    炸分炸的厉害.(当然这跟b哥定律无关 话说好久没人嘲笑我菜了,快飘的不知道到哪了. 谁能讽我两句我不要面子的. 另外在博客上写些没用的东西好浪费精力啊我又不想当网红 主要是考试的时候心态不稳. 以为T ...

  5. csps模拟85表达式密码,电压机制,括号密码题解

    题面:https://www.cnblogs.com/Juve/articles/11733280.html 表达式密码: 是个水题... #include<iostream> #incl ...

  6. csp-s模拟48,49 Tourist Attractions,养花,画作题解

    题面:https://www.cnblogs.com/Juve/articles/11569010.html Tourist Attractions: 暴力当然是dfs四层 优化一下,固定两个点,答案 ...

  7. [CSP-S模拟测试]:降雷皇(DP+树状数组)

    题目描述 降雷皇哈蒙很喜欢雷电,他想找到神奇的电光.哈蒙有$n$条导线排成一排,每条导线有一个电阻值,神奇的电光只能从一根导线传到电阻比它大的上面,而且必须从左边向右传导,当然导线不必是连续的.哈蒙想 ...

  8. 【NOIP2017提高组模拟12.10】神炎皇

    题目 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 分析 设\(gcd(a,b)= ...

  9. 【JZOJ4919】【NOIP2017提高组模拟12.10】神炎皇

    题目描述 神炎皇乌利亚很喜欢数对,他想找到神奇的数对. 对于一个整数对(a,b),若满足a+b<=n且a+b是ab的因子,则成为神奇的数对.请问这样的数对共有多少呢? 数据范围 对于100%的数 ...

随机推荐

  1. java-day13

    异常 指的是程序在执行过程中,出现的非正常情况,最终会导致JVM的非正常停止 异常分类:编译异常,运行期异常 异常的产生过程分析 throw关键字:指方法中抛出指定异常 使用格式:throw new ...

  2. tushare使用教程:初始化调用PRO版数据示例

    下面介绍两种常用的数据调取方式: 通过tushare python包 使用http协议直接获取 注:pro版数据接口采用语言无关的http协议实现,但也提供了多种语言的SDK数据获取. 前提条件 1. ...

  3. c# 使用Expression 生成sql

    使用Expression 生成sql  update语句的时候遇到了个问题 ,Expression<Action<T>>  la   这个委托里面老获取不到 引用类型的值,甚至 ...

  4. Mobox企业网盘回收站文件清空与恢复的管控

    1. Mobox系统提供了 个人网盘的回收站 2. Mobox系统提供了 针对公司及部门文档柜的回收站 Mobox系统对个人网盘的回收站可以做这样的限制 1)  可以通过安装程序 ,不出现 回收站 2 ...

  5. Java 多线程 - Future

    Java中Future的使用场景和解析 https://blog.csdn.net/hongtaolong/article/details/83349705 (细看!!!)

  6. 1001CSP-S模拟测试赛后总结

    祖国七十岁生日快乐!!! 话说在国庆节这天考试…… 临时换座换到了某诺和yzh中间.两边都是大佬紧张一批. 加上迟到了两分钟,加上昨晚熬夜写实践报告,状态并不是特别好. 这套题稍简单.于是尽管我T1A ...

  7. MFC基础类及其层次结构

    从类CCmdTarget派生出绝大多数MFC中的类,其层次结构如下图: 从根类Cobject层层派生出绝大多数MFC中的类,层次结构如下图: MFC中重点类: CObject类是MFC的绝大部分类的基 ...

  8. duilib教程之duilib入门简明教程6.XML配置界面

    前面那些教程都是为了让小伙伴们从win32.MFC过渡到duilib,让大家觉得duilib不是那么陌生,如果大家现在还对duilib非常陌生的话,那就说明前面的教程做得不好,请大家在下面留言,我会一 ...

  9. LUOGU P4042 [AHOI2014/JSOI2014]骑士游戏 (spfa+dp)

    传送门 解题思路 首先设\(f[x]\)表示消灭\(x\)的最小花费,那么转移方程就是 \(f[x]=min(f[x],\sum f[son[x]] +s[x])\),如果这个转移是一个有向无环图,那 ...

  10. SPSS数据编辑器界面 度量 名义 序号 标签

    SPSS数据编辑器界面 度量 名义 序号 标签 变量视图:变量视图用于管理变量的属性,包括变量名称,类型,标签,缺失值,度量标准等属性. 数据视图:数据视图用于管理录入的数据,一行表示一条记录在不同变 ...