11.2模拟赛总结
题目难度:绿,上篮/下紫,蓝,紫
预估得分:70+30+0+0
实际得分:30+0+0+0
先通读了一遍t1,t2,想出来t1O(n^2)(70) ,t2特殊性质12(30)的解法,斟酌后决定先写t1的部分分(70),代码因编译器报错(实际上没错)调了很久,大概10:30写完。开始写t2部分分,大概11:30写完,看了看剩下的部分分感觉都写不完,但最后还是去写了t3的部分分(没写完)。
t1
看到n^2的做法和线性差距不大时就没再去想正解,想到写法是枚举所有单词+unordered_map。忘记了unordered_map最差的时间复杂度为O(n),70->30
当时写的代码
#include <bits/stdc++.h>
using namespace std;
#define ull unsigned long long
const int N=1e6+10,H=131;
unordered_map<ull,bool>mp;
char a[N],b[N];
ull hasha[N],hashb[N],powh[N];
int main(){
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
scanf("%s",a+1); scanf("%s",b+1);
int la=(int)strlen(a+1),lb=(int)strlen(b+1);
ull ans=1;
for(int i=1;i<=la;++i){
hasha[i]=hasha[i-1]*H+a[i];
if(!mp[hasha[i]]){
ans++; mp[hasha[i]]=1;
}
}
powh[0]=1;
for(int i=1;i<=la;++i) powh[i]=powh[i-1]*H;
for(int i=lb;i>=1;--i){
hashb[i]=b[i]*powh[lb-i]+hashb[i+1];
if(!mp[hashb[i]]){
ans++; mp[hashb[i]]=1;
}
}
for(int i=1;i<=la;++i){
for(int j=lb;j>=1;--j){
if(!mp[hasha[i]*powh[lb-j+1]+hashb[j]]){
ans++; mp[hasha[i]*powh[lb-j+1]+hashb[j]]=1;
}
}
}
cout<<ans;
return 0;
}
正解
代码
#include <bits/stdc++.h>
using namespace std;
#define ull unsigned long long
const int N=1e6+10,H=131;
unordered_map<ull,bool>mp;
char a[N],b[N];
ull hasha[N],hashb[N],powh[N];
int main(){
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
scanf("%s",a+1); scanf("%s",b+1);
int la=(int)strlen(a+1),lb=(int)strlen(b+1);
ull ans=1;
for(int i=1;i<=la;++i){
hasha[i]=hasha[i-1]*H+a[i];
if(!mp[hasha[i]]){
ans++; mp[hasha[i]]=1;
}
}
powh[0]=1;
for(int i=1;i<=la;++i) powh[i]=powh[i-1]*H;
for(int i=lb;i>=1;--i){
hashb[i]=b[i]*powh[lb-i]+hashb[i+1];
if(!mp[hashb[i]]){
ans++; mp[hashb[i]]=1;
}
}
for(int i=1;i<=la;++i){
for(int j=lb;j>=1;--j){
if(!mp[hasha[i]*powh[lb-j+1]+hashb[j]]){
ans++; mp[hasha[i]*powh[lb-j+1]+hashb[j]]=1;
}
}
}
cout<<ans;
return 0;
}
t2
想出了特殊性质AB,
sort(wp+1,wp+tot+1);->sort(wp+1,wp+n+1); 30->25
因苹果用不了万能头而没用万能头,25->0
30pts
#include <bits/stdc++.h>
using namespace std;
#define ull unsigned long long
const int N=1e6+10,H=131;
unordered_map<ull,bool>mp;
char a[N],b[N];
ull hasha[N],hashb[N],powh[N];
int main(){
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
scanf("%s",a+1); scanf("%s",b+1);
int la=(int)strlen(a+1),lb=(int)strlen(b+1);
ull ans=1;
for(int i=1;i<=la;++i){
hasha[i]=hasha[i-1]*H+a[i];
if(!mp[hasha[i]]){
ans++; mp[hasha[i]]=1;
}
}
powh[0]=1;
for(int i=1;i<=la;++i) powh[i]=powh[i-1]*H;
for(int i=lb;i>=1;--i){
hashb[i]=b[i]*powh[lb-i]+hashb[i+1];
if(!mp[hashb[i]]){
ans++; mp[hashb[i]]=1;
}
}
for(int i=1;i<=la;++i){
for(int j=lb;j>=1;--j){
if(!mp[hasha[i]*powh[lb-j+1]+hashb[j]]){
ans++; mp[hasha[i]*powh[lb-j+1]+hashb[j]]=1;
}
}
}
cout<<ans;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端