2025省选模拟15

2025省选模拟15

\(T1\) P1045. 数 \(100pts\)

  • 原题: SP6408 KKKCT2 - Counting Triangles 2 | SP5464 CT - Counting triangles

  • 考虑枚举直角顶点 \((i,j),0 \le i \le x,0 \le j \le y\),然后分为了 \(8\) 种贡献情况。

  • \(\begin{cases} a=\min(i,y-j) \\ b=\min(x-i,j) \\ c=\min(i,j) \\ d=\min(x-i,y-j) \end{cases}\)\(8\) 种情况的贡献分别为 \(a,d,b,c,ad,bd,ac,ad\) ,加起来后得到 \((a+b+1)(c+d+1)-1\) ,但没有什么可以优化的地方。

  • 观察乘积项,以 \(ac\) 为例,考虑固定 \(i\) 这个常量,统计 \(j\) 的贡献,分讨 \(0,y-j,j,y\) 划分成的三个区间内部的转移即可。

    点击查看代码
    const ll p=20120712;
    ll s1(ll n)
    {return n*(n+1)/2;
    }
    ll s2(ll n)
    {return n*(n+1)*(2*n+1)/6;
    }
    ll ask(ll up,ll a,ll b)
    {ll ans=0;ans+=s1(min(a,up))+max(0ll,(up-a))*a;//2e8ans+=s2(min(min(a,b)-1,up));//2e12if(min(min(a,b)-1,up)<min(max(a,b),up))ans+=(min(min(a,b)-1,up)+1+min(max(a,b),up))*(min(max(a,b),up)-min(min(a,b)-1,up))/2*min(a,b);//2e12ans+=max(0ll,(up-max(a,b)))*a*b;//1e12return ans;
    }
    int main()
    {
    #define Isaac
    #ifdef Isaacfreopen("count.in","r",stdin);freopen("count.out","w",stdout);
    #endifint t,x,y,i,j;ll ans;cin>>t;for(;t>=1;t--){cin>>x>>y;  ans=0;// a=min(i,y-j),b=min(x-i,j),c=min(i,j),d=min(x-i,y-j)for(i=0;i<=x;i++){ans+=ask(y,i,x-i);// bc+cans+=ask(y,x-i,i);// ad+d}for(i=0;i<=y;i++){ans+=ask(x,y-i,i);// ac+aans+=ask(x,i,y-i);// bd+b}cout<<ans%p<<endl;}	return 0;
    }
    

\(T2\) P1047. 树 \(10pts\)

  • 部分分

    • \(10pts\) :去大样例里把 \(n \le 8\) 的数据粘过来。
  • 正解

    • 拼劲全力无法战胜。

    • 解法 \(5\) 中提到的在输出答案的时候除以 \(n\) 的处理方法同 暑假集训CSP提高模拟3 T1 P117. abc猜想 。
    点击查看 std
    #include <bits/stdc++.h>
    using namespace std;
    int n, T;
    long long mod, mat[31][2][2];
    int main() {freopen("tree.in", "r", stdin);freopen("tree.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL);mat[0][0][0] = 0;mat[0][0][1] = 1;mat[0][1][0] = 1;mat[0][1][1] = 1;cin >> T;while (T--) {cin >> n >> mod;mod *= n;int tmp = n;vector<int> pr, fac;for (int i = 2; i <= sqrt(tmp); i++)if (tmp % i == 0) {pr.push_back(i);while (tmp % i == 0) tmp /= i;}if (tmp != 1) pr.push_back(tmp);for (int i = 1; i <= sqrt(n); i++)if (n % i == 0) {fac.push_back(i);if (i * i != n) fac.push_back(n / i);}for (int i = 1; i < 31; i++) {mat[i][0][0] = (__int128(mat[i - 1][0][0]) * mat[i - 1][0][0] +__int128(mat[i - 1][0][1]) * mat[i - 1][1][0]) %mod;mat[i][0][1] = (__int128(mat[i - 1][0][0]) * mat[i - 1][0][1] +__int128(mat[i - 1][0][1]) * mat[i - 1][1][1]) %mod;mat[i][1][0] = (__int128(mat[i - 1][1][0]) * mat[i - 1][0][0] +__int128(mat[i - 1][1][1]) * mat[i - 1][1][0]) %mod;mat[i][1][1] = (__int128(mat[i - 1][1][0]) * mat[i - 1][0][1] +__int128(mat[i - 1][1][1]) * mat[i - 1][1][1]) %mod;}long long ans = 0;for (auto i : fac) {int phi = n / i;for (auto j : pr)if (phi % j == 0) phi = phi / j * (j - 1);long long f[2] = {1, 1}, g[2];for (int j = 0; j < 31; j++)if (i + i - 2 & (1 << j)) {g[0] = (__int128(f[0]) * mat[j][0][0] +__int128(f[1]) * mat[j][1][0]) %mod;g[1] = (__int128(f[0]) * mat[j][0][1] +__int128(f[1]) * mat[j][1][1]) %mod;f[0] = g[0];f[1] = g[1];}ans = (ans + __int128(phi) * (f[0] + f[0] + f[1] - 2)) % mod;}cout << ans / n << '\n';}
    }

\(T3\) P1046. 书 \(0pts\)

  • 原题: HDU2484 Build the Tower

  • 对书进行排序后,有 \(f_{S}=1+\frac{1}{c+1}(f_{S \bigoplus \operatorname{lowbit}(S)}+\sum\limits f_{S|(1<<i)})\) 。从 \(S \bigoplus \operatorname{lowbit}(S)\)\(S\) 连一条有向边得到树形关系后考虑树上高斯消元。

  • 观察到实际上栈顶元素和厚度和相同时,后续决策是相同的,于是状态数从 \(O(2^{n})\) 优化到了 \(O(nm)\)

  • 此时有 \(f_{x}=1+\frac{1}{c+1}f_{fa_{x}}+\frac{\sum\limits_{y \in \operatorname{Son}(x)}f_{y}}{c+1}=a_{x}f_{fa_{x}}+b_{x}\) ,解得 \(a_{x}=\frac{1}{(c+1)(1-\frac{1}{c+1}\sum\limits_{y \in \operatorname{Son}(x)}a_{y})},b_{x}=\frac{1+\frac{1}{c+1}\sum\limits_{y \in \operatorname{Son}(x)}b_{y}}{1-\frac{1}{c+1}\sum\limits_{y \in \operatorname{Son}(x)}a_{y}}\)

  • 实际实现时,可以设 \(f_{i,j}\) 表示栈顶为 \(i\) 厚度和为 \(j\) 的期望,从 \(f_{k,j+b'_{k}}\) 转移而来;加入一个根节点 \(n+1\)\(f_{n+1,0}\) 作为答案。

    点击查看代码
    pair<int,int>c[110];
    double a[110][110],b[110][110];
    int main()
    {
    // #define Isaac
    #ifdef Isaacfreopen("book.in","r",stdin);freopen("book.out","w",stdout);
    #endifint n,m,cnt,i,j,k;double suma,sumb;while(cin>>n>>m){c[n+1].first=101;for(i=1;i<=n;i++)  cin>>c[i].first>>c[i].second;sort(c+1,c+1+n);for(i=1;i<=n+1;i++){for(j=0;j<=m;j++){cnt=suma=sumb=0;for(k=1;k<=i;k++)  cnt+=(c[k].first<c[i].first);for(k=1;k<=i;k++){if(c[k].first<c[i].first&&j+c[k].second<=m){suma+=a[k][j+c[k].second];sumb+=b[k][j+c[k].second];}}a[i][j]=1/(1-suma/(cnt+1))/(cnt+1);b[i][j]=(sumb/(cnt+1)+1)/(1-suma/(cnt+1));}}if(b[n+1][0]>18000)  cout<<"INF"<<endl;else  printf("%.3lf\n",b[n+1][0]);}return 0;
    }
    

总结

  • \(T2\) 尝试拉格朗日插值但因为不保证模数是质数,遂无果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/889185.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

独立开发之五个月干到4万$+

写文章的起因 本来在群里跟大伙聊天的时候,然后就聊产品终于赚钱,我说要不我写个小册或者出个课把,就写我们这种穷逼独立开发怎么做产品变现,然后我认真想了一下可能我花1个月写小册的时间的性价比不是很高。 然后本来这个话题都完结了,有小伙伴就私聊我,直接发了我个红包…

Prompt入门

Prompt,,提示词,是使用生成式AI的必备前提,好的提示词能让生成式AI给出更精准的结果,不仅能节省时间,还能节省tokens(这可是美金呀),所以在生成式AI出来后,就有Prompt Engineer提示工程师之说。于是,就有很多分享提示的文章,还有很多网站,专门收集各种场合的提示词…

SEO完全指南 从原理到实战的搜索引擎优化手册 第三章SEO与内容优化

第三章:SEO与内容 1. 基于算法的内容优化策略 搜索引擎算法的主要目标是为用户提供最相关、最有价值的内容。这些算法使用复杂的机器学习模型来理解和评估网页内容。它们考虑多个因素,包括关键词的使用、内容的深度和质量、用户交互数据以及网站的整体结构和权威性。要在搜索…

【攻防世界】CatchCat

上网一查发现是GPS数据文件 到这个GPS绘图网址上传.txt文件即可 还有一种方法,先转为KML文件txt2kml网址kml绘图

智能化客户行为轨迹分析:AI视频监控在大型商场的技术方案介绍(part7)

项目背景:为了提升顾客体验并支持精准营销,卖场或商场需要通过智能化手段分析客户在商场内的行为路线。一、具体需求 1、行为路径分析:跟踪顾客在商场内的移动轨迹,了解顾客的购物习惯和偏好。 2、高频活动区域识别:通过分析顾客停留和活动频率,识别出顾客聚集的区域。 3…

在Android源码中为APK编译系统权限

在Android源码中为APK编译系统权限,授权使用 android:sharedUserId="android.uid.system" 系统权限,可以在Android开发中授予更多功能,以瑞芯微3568平台为例系统权限获取 打包为APK进行系统签名对于 部分功能的访问需要使用到系统权限,需要 添加 android:shared…

PNG图片宽高隐写

https://www.cnblogs.com/senior-engineer/p/9548347.html

[tldr] vscode的remote插件的config文件内容解析

参考VS Code Remote SSH配置 解决了什么问题 vscode的remote插件可以直接通过可视化的UI新建一个连接通过ssh指令添加服务器的连接方式但是这种方式添加的服务器名字等于服务器IP地址,难以理解 如果出现同一个IP地址,使用不同端口的SSH,那么会被视作同一个服务器,因为连接名字和…

使用Go复刻skiplist核心功能

0、引言 正好做LC每日一题要求实现一个跳表,于是学习了redis的扩展skiplist,并使用Go进行复刻学习。学习参考了文章:Redis内部数据结构详解(6)——skiplist - 铁蕾的个人博客 因为作者能力有限,本文只是对跳表的核心功能:创建节点与跳表、插入节点、删除节点、获取节点ran…

BUUCTF-RE-[ACTF新生赛2020]usualCrypt

又他妈的是新生赛,我都不是新生了还天天被折磨。 首先查壳分析,然后反编译程序,可以看到程序逻辑还是比较简单的我们进行一下整理和重命名,可以得到完整的程序逻辑: int __cdecl main(int argc, const char **argv, const char **envp) {int v3; // esichar v5[15]; // [e…

探秘Transformer系列之(6)--- token

从零开始解析Transformer,目标是:(1) 解析Transformer如何运作,以及为何如此运作,让新同学可以入门;(2) 力争融入一些比较新的或者有特色的论文或者理念,让老鸟也可以有所收获。探秘Transformer系列之(6)--- token 0x00 概述 语言是人类特有的概念。作为一个抽象符号,…

leetcode hot 10

解题思路:滑动窗口问题,关键在于记录之前出现过的字符,当遍历过程中碰到之前出现的,就从之前出现的下一个作为start,实时比较当前值和最长值并赋值,最后返回最长值。java可以采用hashmap记录出现过的字符,value保存它的位置+1的值,作为出现重复的字符的时候的start的参考…