9.15 比赛总结

突然想起来自己把比赛总结的好习惯忘掉了,所以现在重新拾起,故名曰《朝花夕拾》。

T1 出了个大阴间题

看数据范围明显状压。很明显,\(a,b\) 分成两部分处理。

\(f_{s,i}\) 表示状态为 \(s\)\(a=i\) 时的所有情况之和,还要计算 \(num_{s,i}\) 表示此时情况数。

\(b\) 直接递推模拟即可,时间复杂度 \(O(2^nn^2)\),拿下最劣解。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int M=1<<18,p=1e9+7;
int n,m,k,s,a[20],b[100];
int f[M][100],num[M][100];
unordered_map<int,int>mp;
signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n>>k;int ans=0,bb=0;for(int i=1;i<n;i++)ans=(ans+bb)%p,bb=(2*bb+1)%p;for(int i=1;i<=n;i++){cin>>a[i];if(!mp[a[i]])mp[a[i]]=1,b[++m]=a[i];if(!mp[a[i]+1])mp[a[i]+1]=1,b[++m]=a[i]+1;}sort(b+1,b+m+1);for(int i=1;i<=m;i++) mp[b[i]]=i;for(int i=1;i<=n;i++) a[i]=mp[a[i]];for(int i=1;i<=n;i++)num[(1<<i)>>1][a[i]]=1;int mx=(1<<n)-1;for(int i=1;i<=mx;i++)for(int j=1;j<=m;j++){if(!num[i][j]) continue;for(int l=1;l<=n;l++)if(!(((1<<l)>>1)&i)){int S=i|((1<<l)>>1);int r=(a[l]==j)?j+1:max(a[l],j);f[S][r]=(f[S][r]+f[i][j]+k*b[r]%p*num[i][j])%p;num[S][r]=(num[S][r]+num[i][j])%p;}}s=(!num[mx][m])?m-1:m;cout<<b[s]<<" "<<(f[mx][s]+ans*num[mx][s])%p;return 0;
} 

T2 最简单辣快来做

T3 是我的你不要抢

很容易想到用哈希进行判断,同时为了避免不必要的重复计算,我们用 \(unordered\_map\) 存储已经计算过的答案。写得好可以拿 \(99pts\)

实际上99分做法挂的原因不是因为做法正确性,而是因为哈希冲突。

我们都知道,哈希冲突是指不一样的字符串,哈希值相同。通常我们用 \(unsigned\ long\ long\) 就可以了,但这道题卡这种哈希,所以我们就可以用 \(998244353\) 作为模数也验证一遍即可。

\(unsigned\ long\ long\) 时间复杂度比较小,所以要放在前面,防止大量问题堆积在 \(get\) 中的第二个 \(if\) 中,导致常数爆炸。(实测,\(ull\ WA,998244353\ TLE\)

下面证明 \(hash\) 时间复杂度正确:

设有 \(x\) 个字符串,\(n=\sum |a_i|\),则时间复杂度为 \(O(nx)(x^2\le q)\)\(O(\frac{nq}{x})(x^2>q)\)

两个式子最大值都是 \(O(n\sqrt q)\),常数很小,可以卡过。

#include<bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define uint unsigned int
using namespace std;
const int M=6e5+5;
const int p=998244353;
const ull q=1145141;
const int qq=19198101;
int z(char c){return c-'a';
}vector<ull>hs[M];
vector<int>hh[M];
string s;ull qp[M];
int n,m,l[M],pq[M];
unordered_map<int,int>mp[M];
int get(int i,int j){for(int k=min(l[i],l[j]);k;k--)if(hs[i][l[i]]-hs[i][l[i]-k]*qp[k]==hs[j][k])if((hh[i][l[i]]-(ll)hh[i][l[i]-k]*pq[k]%p+p)%p==hh[j][k]) return k;return 0;
}signed main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n>>m,qp[0]=pq[0]=1;for(int i=1;i<=n;i++){cin>>s,s=" "+s;l[i]=s.size()-1;hs[i].push_back(0);for(int j=1;j<=l[i];j++)hs[i].push_back(hs[i][j-1]*q+z(s[j]));hh[i].push_back(0);for(int j=1;j<=l[i];j++)hh[i].push_back(((ll)hh[i][j-1]*qq%p+z(s[j]))%p);}for(int i=1;i<M;i++)qp[i]=qp[i-1]*q,pq[i]=(ll)pq[i-1]*qq%p;while(m--){int x,y;cin>>x>>y;if(!mp[x].count(y))mp[x][y]=get(x,y);cout<<mp[x][y]<<"\n";}return 0;
}

T4 显然也是我整的

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

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

相关文章

读构建可扩展分布式系统:方法与实践05分布式缓存

分布式缓存1. 分布式缓存 1.1. 缓存存在于应用程序的许多地方1.1.1. 行应用程序的CPU具有高速多级硬件缓存,可以减少相对较慢的主内存访问1.1.2. 数据库引擎可以利用主内存来缓存数据存储的内容,这样在许多情况下查询就可以不用访问速度相对较慢的磁盘1.2. 分布式缓存是可扩展…

C#/.NET/.NET Core技术前沿周刊 | 第 5 期(2024年9.9-9.15)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿,推荐或自荐优质文章/项目/学习资源等。…

python-super函数

单继承 在单继承中super主要是用来调用父类的方法的class A:def __init__(self):self.n = 2def add(self, m):print(self is {0} @A.add.format(self))self.n += mclass B(A):def __init__(self):self.n = 3def add(self, m):print(self is {0} @B.add.format(self))super().ad…

百度AI studio克隆失败解决办法

百度AI studio克隆失败解决办法 目前还没办法在其他地方查到问题的解决办法,在此记录一下 具体问题描述 在飞桨AI studio克隆paddle的submodule时,会遇到各种网络导致的问题(开关代理都没有用) 具体的报错包括:失败的尝试 把github链接换成gitee的,但是一些库在gitee没有…

正式发售!《黑神话:悟空》背后的技术力量——UE5与实时云渲染

《黑神话:悟空》终于在8月20号正式发售,相信大家都已经玩起来了!作为国产游戏的画质巅峰之作,《黑神话:悟空》凭借其令人叹为观止的画面质量和游戏体验,赢得了广泛的好评.这一切都离不开游戏背后的强大技术支持——虚幻引擎5(UE5).千呼万唤始出来,《黑神话:悟空》终于在今年…

[JS] ES Modules的运作原理

本文介绍了 ES Modules (ESM) 在浏览器环境中的运行原理,详细阐述了 ESM 的三大加载步骤:构建、实例化、求值,并讨论了其动态加载能力、循环依赖处理方式及与 CommonJS 的区别。ESM 通过 import 语句引入其它依赖,通过 export 语句导出模块成员。 在浏览器环境中,<scri…

Go runtime 调度器精讲(八):sysmon 线程和 goroutine 运行时间过长的抢占

原创文章,欢迎转载,转载请注明出处,谢谢。0. 前言 在 Go runtime 调度器精讲(七):案例分析 一文我们介绍了一个抢占的案例。从案例分析抢占的实现,并未涉及到源码层面。本文将继续从源码入手,看 Go runtime 调度器是如何实现抢占逻辑的。 1. sysmon 线程 还记得 Go run…

Go runtime 调度器精讲(八):sysmon 线程和运行时间过长的抢占

原创文章,欢迎转载,转载请注明出处,谢谢。0. 前言 在 Go runtime 调度器精讲(七):案例分析 一文我们介绍了一个抢占的案例。从案例分析抢占的实现,并未涉及到源码层面。本文将继续从源码入手,看 Go runtime 调度器是如何实现抢占逻辑的。 1. sysmon 线程 还记得 Go run…

usb协议

1 USB 信号编码 USB 传输的编码就是 NRZI 格式,在 USB 中,电平翻转代表逻辑 0,电平不变代表逻辑1:翻转的信号本身可以作为一种通知机制,可以看到,即使把 NRZI 的波形完全翻转,所代表的数据序列还是一样的,对于像 USB 这种通过差分线来传输的信号方便。

引入语义标签过滤:利用标签相似度增强检索

引入语义标签过滤:利用标签相似度 增强检索 传统的标签搜索缺乏灵活性。如果我们要过滤恰好包含给定标签的样本,可能会出现这样的情况,特别是对于只包含几千个样本的数据库, 可能没有任何(或只有少数)与我们的查询匹配的样本。两种搜索的不同之处在于搜索结果的稀缺性 传统的…