2025多校冲刺省选模拟赛3
2025多校冲刺省选模拟赛3
A. 等差
-
考虑哈希,每
个作为一组与上一组统一计算。- 取
值域时用高精度来存储并判断的正确性显然。
- 取
-
观察到可行的最小的
单调不降,不妨直接枚举答案。 -
暴力实现时间复杂度为
,精细实现记录极长匹配结尾后时间复杂度为 。点击查看代码
const ll mod=1000003579,base=313333331; ll a[2000010],pos[2000010]; ll hsh[2000010],jc[2000010]; ll ask_hash(ll l,ll r) { return (hsh[r]-(ull)hsh[l-1]*jc[r-l+1]%mod+mod)%mod; } int main() { #define Isaac #ifdef Isaac freopen("arithmetic.in","r",stdin); freopen("arithmetic.out","w",stdout); #endif ll n,i,j,k,last,ans,flag; scanf("%lld",&n); jc[0]=1; for(i=1;i<=n;i++) { jc[i]=jc[i-1]*base%mod; pos[i]=2*i; } for(i=1,k=1;i<=n;i++) { scanf("%lld",&a[i]); hsh[i]=(hsh[i-1]*base%mod+a[i])%mod; ans=0; for(;2*k+1<=i;k++) { last=(ask_hash(k+1,2*k)-ask_hash(1,k)+mod)%mod; flag=1; for(j=pos[k];j+k<=i&&flag==1;j+=k) { if((ask_hash(j+1,j+k)-ask_hash(j-k+1,j)+mod)%mod==last) pos[k]=j; else flag=0; } if(j!=i&&flag==1) { flag&=((ask_hash(j+1,i)-ask_hash(j-k+1,i-k)+mod)%mod==(ask_hash(1+k,k+i-j)-ask_hash(1,i-j)+mod)%mod); } if(flag==1) { ans=1; break; } } printf("%lld",ans); } return 0; }
B. 叉积
-
等价于最大化
。 -
部分分
:暴力。
点击查看代码
pair<ll,ll>a[100010]; int main() { #define Isaac #ifdef Isaac freopen("cross.in","r",stdin); freopen("cross.out","w",stdout); #endif ll n,m,x,y,ans=0,minn,sum,i,j; scanf("%lld%lld",&n,&m); for(i=1;i<=n;i++) { scanf("%lld%lld",&a[i].first,&a[i].second); } for(j=1;j<=m;j++) { scanf("%lld%lld",&x,&y); ans=sum=minn=0; for(i=1;i<=n;i++) { sum+=x*a[i].second-y*a[i].first; ans=max(ans,sum-minn); minn=min(minn,sum); } printf("%lld\n",ans); } return 0; }
-
正解
C. 序列变换
-
部分分
:爆搜。
点击查看代码
const ll p=998244353; int a[50],b[50],ans=0; bitset<210>s; void dfs(int n) { int flag=1; for(int i=1;i<=n;i++) { flag&=(a[i]==b[i]); } if(flag==1) { ans=(ans+1)%p; return; } for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { if(a[i]+1<=b[i]&&a[j]+1<=b[j]) { s[a[i]]=s[a[j]]=0; if(s[a[i]+1]==0&&s[a[j+1]]==0) { a[i]++; a[j]++; s[a[i]]=s[a[j]]=1; dfs(n); s[a[i]]=s[a[j]]=0; a[i]--; a[j]--; } s[a[i]]=s[a[j]]=1; } } } } int main() { #define Isaac #ifdef Isaac freopen("transform.in","r",stdin); freopen("transform.out","w",stdout); #endif int n,i; cin>>n; for(i=1;i<=n;i++) { cin>>a[i]; s[a[i]]=1; } for(i=1;i<=n;i++) { cin>>b[i]; } dfs(n); cout<<ans<<endl; return 0; }
-
正解
总结
- 因不会叉积基本概念,打完
后直接去学向量了。
后记
- 因是
赛制,学校 可以下载第一个非 测试点。
本文来自博客园,作者:hzoi_Shadow,原文链接:https://www.cnblogs.com/The-Shadow-Dragon/p/18662796,未经允许严禁转载。
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下