CSP-S 模拟测试57题解

2023-05-16

人生第一次A,B层一块考rank2,虽然说分差没几分,但还是值得纪念。

题解:

T1 天空龙:

大神题,因为我从不写快读也没有写考场注释的习惯,所以不会做,全hzoi就kx会做,kx真大神级人物。

T2 巨神兵:

大神题,一看数据范围这么小,我们考虑状压,最傻逼的暴力思路是压边,但是这显然不行。正解是压点,设$f[s]$为当前选定点集状态为$s$的方案数。

我们考虑转移,当前选定的点集肯定是可以通过边和没有连过来的点相连构成新的方案。所以转移所以我们考虑枚举补集的子集$k$,设$cnt$为s与k两个点集相连的边数,那么转移为$f[s|k]+=f[s]*2^{cnt}$?不,这样会算重,因为比如我们先加A点,再加B点,和先加B点,再加A点是一样的。所以考虑容斥,容斥系数为$(-1)^{size[k]+1}$,蒟蒻博主不会正着推,但是这个可以证明是对的。我们设$g[i]$为转移了$i$层的系数,那么显然$g[0]=1$,然后$g$的递推式为$g[i]=\sum_{j=1}^{i}{C_{j}^{i}*(-1)^{j+1}*g[i-j]}$,我们要证的是$g[i]=1$,首先$g[i-j]$可以消掉,因为你由3层转移到5层,和从0层转移到2层是一样的然后

    $\sum_{j=1}^{i}{C_j^i*(-1)^{j+1}}$

    $=(-1)*(\sum_{j=0}^{i}{C_j^i*(-1)^{j}}-C_j^0*(-1)^0)$

    $=(-1)*((1-1)^i-1)=1$    证毕。

然后转移用了很多预处理,主要是找两个点集相连的边,我们首先预处理每个点与之相连点的状态,将它与上当前枚举的补集就好,然后还要预处理的是,每个二进制数中1的个数和每个取出来的1,是第几位,然后dp就好了。


 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define int long long
 4 const int N=1900000,mod=1e9+7;
 5 int first[N],nex[N],to[N],tot,rc[N],sta[N],ma[5242880],f[5242880],n,m,qpow[N],re[N];
 6 void add(int a,int b){
 7     to[++tot]=b,nex[tot]=first[a],first[a]=tot;
 8 }
 9 signed main(){
10     scanf("%lld%lld",&n,&m);
11     for(int i=1;i<=m;++i){
12         int x,y;
13         scanf("%lld%lld",&x,&y);
14         add(x,y);
15     }
16     for(int i=0;i<=(1<<n);++i){
17         ma[i]=ma[i>>1]+(i&1);
18     }
19 //    for(int i=1;i<=1<<n;++i) cout<<"ma["<<i<<"]=="<<ma[i]<<" ";cout<<endl;
20     f[0]=qpow[0]=1;
21     for(int i=1;i<=n*n;++i) qpow[i]=(qpow[i-1]<<1)%mod;
22     for(int i=0;i<=n+1;++i) rc[i]=(i&1)?-1:1;
23 //    for(int i=0;i<=n+1;++i) cout<<rc[i]<<" ";cout<<endl;
24     for(int i=1;i<=n;++i){
25         re[1<<i-1]=i;
26         for(int j=first[i];j;j=nex[j]){
27             sta[i]|=1<<to[j]-1;
28         }
29     }
30     int Max=1<<n,cnt=0,maxn=Max-1;
31     for(register int s=0;s^Max;++s){register int kl=~s;
32         for(register int i=kl&maxn;i;i=(i-1)&kl){
33             cnt=0;
34             for(register int j=s;j;j-=j&-j) cnt+=ma[sta[re[j&-j]]&i];
35 //            cout<<cnt<<" ";
36 //            cout<<f[s]%mod*qpow[cnt]%mod<<" ";
37             (f[s|i]+=rc[ma[i]+1]*f[s]%mod*qpow[cnt]%mod)%=mod;
38         }
39     }
40     printf("%lld\n",(f[maxn]+mod)%mod);
41 }  
obelisk

 T3 太阳神:

正难则反,lcm大于n的不好求,我们可以考虑求小于n的,即$n^2-\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}{[lcm(i,j)<=n]}$

然后再转化$n^2-\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}{[\frac{i\times j}{gcd(i,j)}<=n]}$,难点在于求后面的那部分,现在我们考虑枚举,$i,j$的最大公约数d,柿子就变成了$\sum\limits_{d=1}^{n}\sum\limits_{a=1}^{\frac{n}{d}}\sum\limits_{b=1}^{\frac{n}{d}}{[gcd(a,b)==1][a\times b\leq \frac{n}{d}]}$

我们考虑求$f_k=\sum\limits_{1\leq a,b\leq n}{[a\times b\leq k][gcd(a,b)==1]}$,我们设$S_k=\sum\limits_{1\leq a,b\leq n}{[a\times b\leq k]}$,这一个数论分块就可以求出,那么$f_k=S_k-\sum\limits_{t>1} f_{\frac{k}{t^2}}$,前面S函数是不考虑gcd为1的条件的,后面的t相当于是枚举a,b的因子,同时把a,b因子提出即可得到$\frac{k}{t^2}$,然后就是关于f函数的求法,把它差分一下得到g[k],那么g[k]的含义就是$\sum\limits [a\times b=k][gcd(a,b)=1]$的a,b对数

$g[k]=2^cnt$,cnt为k的质因子种数,因为每种质因子,只能全部给a或b,而不能一部分给a,一部分给b,因为那样的话$gcd(a,b)$就不是1,这样f线筛即可,当n较小时直接用线筛筛出来的,当n较大时用上面提到的方法迭代即可。最外层数论分块,时间复杂度O(玄学)$O(n^{\frac{2}{3}})$

 


 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define int long long
 4 const int N=1e7+10,mod=1e9+7;
 5 int v[N],prime[N],num,f[N],n;
 6 void init(){
 7     f[1]=1;
 8     for(int i=2;i<=10000000;++i){
 9         if(!v[i]){
10             prime[++num]=i;
11             f[i]=2;
12             v[i]=1;
13         }
14         for(int j=1;j<=num&&i*prime[j]<=10000000;++j){
15             v[i*prime[j]]=1;
16             if(i%prime[j]==0){
17                 f[i*prime[j]]=f[i];
18                 break;
19             }
20             f[i*prime[j]]=f[i]*f[prime[j]]%mod;
21 //            cout<<f[i]<<" "<<f[prime[j]]<<" "<<f[i*prime[j]]<<endl;
22         }
23     }
24 }
25 int calS(int x){
26     int ans=0;
27     for(int l=1,r;l<=x;l=r+1){
28         r=x/(x/l);
29         (ans+=(r-l+1)*(x/l)%mod)%=mod;
30     }
31     return ans;
32 }
33 
34 int calF(int x){//cout<<x<<" "<<endl;
35     if(x<=10000000) return f[x];
36     int ans=0;
37     ans=calS(x)%mod;
38     for(int i=2;i*i<=x;++i){
39         (((ans-=calF(x/(i*i))+mod)%=mod)+=mod)%=mod;
40     }
41     return ans;
42 }
43 
44 signed main(){
45     scanf("%lld",&n);
46     init();
47     //for(int i=1;i<=20;++i) cout<<"f["<<i<<"]=="<<f[i]<<" ";cout<<endl;
48     for(int i=1;i<=10000000;++i) (f[i]+=f[i-1])%=mod;
49     int ans=(n%mod*(n%mod))%mod;
50     for(int i=1,r;i<=n;i=r+1){
51         r=n/(n/i);
52 //        cout<<ans<<" ";
53 //        cout<<i<<" "<<r<<endl;
54         (((ans-=calF(n/i)%mod*(r-i+1)%mod+mod)%=mod)+=mod)%=mod;
55 //        cout<<calF(n/i)%mod*(r-i+1)%mod+mod<<endl;
56     }
57     printf("%lld",(ans+mod)%mod);
58 }  
ra

 

转载于:https://www.cnblogs.com/leom10/p/11623873.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSP-S 模拟测试57题解 的相关文章

  • CCF-CSP【202303-3 LDAP】C++

    CCF CSP 202303 3 LDAP C 43 43 CCF真题网址 第一次提交结果超时 只有20分 题目思路 我的思路较为简单 xff0c 即对于每个匹配表达式 xff0c 遍历N个用户 xff0c 验证是否匹配 对于每个表达式有两
  • CCP-CSP 201912-5 魔数 暴力25

    原题链接 xff1a CCP CSP 201912 5 魔数 线段树是写不来的 span class token macro property span class token directive hash span span class
  • CSP CCF: 202012-2 期末预测之最佳阈值 (C++)

    目录 题目来源题目描述解题过程完整代码 题目来源 链接 CCF 期末预测之最佳阈值 题目描述 解题过程 题目要求为选取合适的安全指数阈值 Theta xff0c 使得该阈值对这 m 位同学上学期的挂科情况进行预测 xff0c 预测正确的次数
  • 【Week 16】CSP-M4

    TT数鸭子 题目描述 输入输出描述 样例 思路 对每个数字按数位进行遍历 xff0c 求取不重复数字个数即可 代码 span class token macro property span class token directive key
  • CSP-M4补题 A_TT数鸭子

    题目 这一天 xff0c TT因为疫情在家憋得难受 xff0c 在云吸猫一小时后 xff0c TT决定去附近自家的山头游玩 TT来到一个小湖边 xff0c 看到了许多在湖边嬉戏的鸭子 xff0c TT顿生羡慕 此时他发现每一只鸭子都不 一样
  • Week8 CSP-M2

    T1 HRZ的序列 题目 相较于咕咕东 xff0c 瑞神是个起早贪黑的好孩子 xff0c 今天早上瑞神起得很早 xff0c 刷B站时看到了一个序列aa xff0c 他对这个序列产生了浓厚的兴趣 他好奇是否存在一个数KK xff0c 使得一些
  • CCF CSP 201512-3 画图

    字符串基础题 问题描述 用 ASCII 字符来画图是一件有趣的事情 xff0c 并形成了一门被称为 ASCII Art 的艺术 例如 xff0c 下图是用 ASCII 字符画出来的 CSPRO 字样 lt 本题要求编程实现一个用 ASCII
  • ccf-csp 期末预测之最佳阈值

    期末预测之最佳阈值 在一开始使用了双重循环的做法 xff0c 没有考虑时间复杂度的问题 xff0c 最终虽然结果正确了 xff0c 但是提交后显示运行时间超时 xff0c 看来复杂度为n2并不满足题目的要求 之后便开始想办法降低复杂度 xf
  • csp认证考试准备Day-1

    今天 xff0c 开启了我的第一个专栏 xff0c 用来记录我的2023年3月的csp认证考试 语言 xff1a c 43 43 本人状况 xff1a 半学期几乎没敲过代码 xff0c 学过c 43 43 和数据结构 xff0c csp第一
  • CSP认证 201803-3 URL映射

    CSP认证 201803 3 URL映射 链接 xff1a http 118 190 20 162 view page gpid 61 T71 题意 xff1a 从简条件下的 U R L 映 射 URL映射
  • CSP-S 模拟52

    rank10 T1 平均数 二分答案 xff0c 让所有的数减去这个答案 xff0c 求前缀和 xff0c 然后验证子序列平均数比这个答案小的的个数是否等于K 只需要找前缀和的逆序对个数即可 xff08 归并排序 xff09 T2 涂色游戏
  • 【202206-3】角色授权

    AC的快乐无与伦比 本蒟蒻刚看到这道题时 就被超长的题干和复杂的关系唬住了 于是学习了各路大神的解法 终于AC 成功照虎画猫了 现将在此过程中学到的种种知识总结如下 作为本小白菜 不但小白还有菜 的编程笔记 Attention 一 C 中的
  • CSP认证历年真题题解 (Python)

    文章目录 此篇文章是小菜本菜使用Python做CCF CSP的一些记录 希望能够以此帮助到正在为题目苦苦思考 但还没有找到解决思路的朋友们 诚然 这里的代码还有很多值得改进之处 希望各位码友不吝赐教 目前已完成历年的第一题 第二题 第三题正
  • CSP 202305-1 重复局面

    题目背景 国际象棋在对局时 同一局面连续或间断出现3次或3次以上 可由任意一方提出和棋 问题描述 国际象棋每一个局面可以用大小为 8 8 的字符数组来表示 其中每一位对应棋盘上的一个格子 六种棋子王 后 车 象 马 兵分别用字母 k q r
  • CCF-CSP 新生必读

    CCF软件能力认证 Certified Software Professional CSP CSP认证考什么 怎么考 1 认证概况 认证名称 计算机软件能力考试认证 简称软件能力认证 认证定义 软件能力包括软件的开发 测试 部署和运行维护能
  • C++语言基础--递归函数

    对于很多编程初学者来说 递归算法是学习语言的最大障碍之一 可能也有一大部分人知道递归 也能看的懂递归 但在实际做题过程中 却不知道怎么使用 递归的定义 1 很官方的说法 递归 在数学与计算机科学中 是指在函数的定义中使用函数自身的方法 也就
  • 出现次数最多的数CSP201312-1(简单c语言解法)

    问题描述 给定n个正整数 找出它们中出现次数最多的数 如果这样的数有多个 请输出其中最小的一个 输入格式 输入的第一行只有一个正整数n 1 n 1000 表示数字的个数 输入的第二行有n个整数s1 s2 sn 1 si 10000 1 i
  • CCF/CSP 201604-2 俄罗斯方块(满分题解Java版)

    此题 猛滴一看确实非常容易让人懵懵的 主要是题目描述的非常不清晰 很难让人能够透彻的理解 如果连题目都看不懂 那就不谈写出代码了 题目描述 官方题目描述 题目地址 题目解读 关键的是要理解题目 Java题解 import java util
  • CSP 202209-1 如此编码

    答题 题目就是字多 include
  • 数据结构--二叉堆与优先队列

    堆的一些性质 1 堆是一颗完全二叉树 2 堆的顶端一定是 最大 最小 的 但是要注意一个点 这里的大和小并不是传统意义下的大和小 它是相对于优先级而言的 3 堆一般有两种样子 小根堆和大根堆 分别对应第二个性质中的 堆顶最大 堆顶最小 对于

随机推荐

  • 靶机大全

    本指南主要通过介绍一些常用渗透环境 给pentester们以自己修炼的机会 并配合一些常规的pentest tools达到学习目的 名称 WebGoat 项目地址 http www owasp org index php OWASP Web
  • Cannot create property 'default' on boolean 'true'"

    解决办法 xff1a 删除node modules包 xff0c 重新npm i 转载于 https www cnblogs com 92xcd p 10443538 html
  • 怎么增加照片的KB大小

    之前都是要想办法压缩图片的大小 今天有人发来一张1 8MB的图片让我帮忙调到30MB左右 一下子放大这么多着实有点茫然 之后想到了一个办法 首先把图片占用体积变大 xff0c 是不会增加清晰度的 xff0c 而减小占用体积却会降低清晰度 第
  • 参数 返回值

    1 函数 函数是对功能的封装 语法 def 函数名 形参列表 函数体 代码块 return 调用 函数名 实参列表 2 返回值 return 在函数执行的时候 如果遇到return 直接返回 1 如果函数什么都不写 不写return 没有返
  • 抽象类调用自己的抽象方法,实现来自实现类(很常用)

    直接上代码 public abstract class Parent public abstract void dosomething public void say dosomething System out println 34 ww
  • 学习笔记:51单片机(STC89C52)如何定时10ms

    1 定时器如何定时 首先大致描述一下定时器的定时原理 xff0c 其实本质就一句话 xff1a 每经过一个机器周期 xff0c 寄存器就加1 这里就又要解释什么是时钟周期 xff0c 什么是机械周期 我们的51单片机无论是开发板还是最小系统
  • cmake 的使用

    官网教程 xff1a https cmake org cmake tutorial 第一个简单的例子 源文件 xff1a tutorial cpp 1 A simple program that computes the square ro
  • python 读取一个文件夹下的所jpg文件保存到txt中

    最近需要使用统计一个目录下的所有文件 xff0c 使用python比较方便 xff0c 就整理了一下代码 1 import os 2 3 def gci filepath 4 files 61 os listdir filepath 5 f
  • cmake 单个目录多个文件的情况

    参考 xff1a https www hahack com codes cmake 源文件一共有三个 xff1a main cpp MathFunctions h MathFunctions cpp 文件内容分别如下 xff1a main
  • k8s config配置文件

    接着上面的博客继续写 pwd gt etc kubernetes cat config kubernetes system config The following values are used to configure various
  • html5手机web页面底部菜单

    一 效果图 二 HTML代码 lt header class 61 34 text center 34 gt TOP lt header gt lt div id 61 34 content 34 gt lt div gt lt div i
  • redis hset hmset过期时间

    hmset m k v 127 0 0 1 6379 gt hset m k v integer 1 127 0 0 1 6379 gt hget m k 34 v 34 127 0 0 1 6379 gt expire m 30 inte
  • Mac下 .bash_profile 和 .zshrc 两者之间的区别

    这是我碰到的需要 source 之后才能使用环境变量的问题 xff0c 我就不细究了 xff0c 说说我的看法 bash profile 中修改环境变量只对当前窗口有效 xff0c 而且需要 source bash profile才能使用
  • h5页面使用js实现保存当前图片到手机相册

    很可惜 xff0c 这个鬼东西微信内置浏览器不适用 页面 xff1a lt doctype html gt lt html gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt meta co
  • HTTP认证之基本认证——Basic(一)

    导航 HTTP认证之基本认证 Basic xff08 一 xff09 HTTP认证之基本认证 Basic xff08 二 xff09 HTTP认证之摘要认证 Digest xff08 一 xff09 HTTP认证之摘要认证 Digest x
  • android给方法设置进度,Android自定义View实现多节点进度条功能的方法

    Android自定义View实现多节点进度条功能的方法 发布时间 xff1a 2020 07 28 16 05 13 来源 xff1a 亿速云 阅读 xff1a 122 作者 xff1a 小猪 这篇文章主要讲解了Android自定义View
  • Linux 系统中如何查看日志 (常用命令)

    cat tail f 日志文件 日 志 文 件说 明 var log message系统启动后的信息和错误日志 xff0c 是Red Hat Linux中最常用的日志之一 var log secure与安全相关的日志信息 var log m
  • 智能指针(shared_ptr,unique_ptr)作为函数参数或者返回值时的一些注意事项

    智能指针 shared ptr unique ptr 作为函数参数或者返回值时的一些注意事项 当智能指针作为函数的参数或者返回值时 xff0c 一直在纠结到底是用智能指针对象本身还是用原始指针 Herb Sutter大师的文章很好的解决了这
  • CSP-S 模拟测试 51 题解

    考试过程 xff1a 惯例先看一遍三道题 xff0c T1 一开始反应要求割点 xff0c 但是这是有向图 xff0c 肯定不能求割点 xff0c 康了一下数据范围 xff0c 有40 是树的 xff0c 还不错 xff0c 决定待会在打
  • CSP-S 模拟测试57题解

    人生第一次A B层一块考rank2 xff0c 虽然说分差没几分 xff0c 但还是值得纪念 题解 xff1a T1 天空龙 xff1a 大神题 xff0c 因为我从不写快读也没有写考场注释的习惯 xff0c 所以不会做 xff0c 全hz