2017多校第5场 HDU 6085 Rikka with Candies bitset
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6085
题意:存在两个长度为n,m的数组A,B。有q个询问,每个询问有一个数字k,可以得到Ai%Bj=k的种数,求种数。
解法:打表出所有查询k,k<Bi,从最大的Bi开始枚举。如果a%b==k,那么(a-k)%b==0,考虑用bitset来加速,复杂度O(n*n/32*5),要想跑得最快需要手写bitset。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <bits/stdc++.h> using namespace std; const int maxn = 50005; bitset <maxn> b1, b2; int b[maxn], ans[maxn]; int main() { int T; scanf ( "%d" , &T); while (T--) { b1.reset(); b2.reset(); int n,m,k,x; scanf ( "%d%d%d" ,&n,&m,&k); int mx=-1; for ( int i=0; i<n; i++) scanf ( "%d" , &x), b1.set(x); for ( int i=0; i<m; i++) scanf ( "%d" , &b[i]), mx = max(mx, b[i]); sort(b,b+m); int cnt=m-1; for ( int i=mx; i>=0; i--){ ans[i]=((b2<<i)&b1).count()&1; if (b[cnt]>=i&&cnt>=0){ for ( int j=0; j<=mx; j+=b[cnt]){ b2.flip(j); } cnt--; } } for ( int i=0; i<k; i++){ int x; scanf ( "%d" , &x); printf ( "%d\n" , ans[x]); } } return 0; } |
分类:
Bitset
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Huawei LiteOS基于Cortex-M4 GD32F4平台移植
· mysql8.0无备份通过idb文件恢复数据过程、idb文件修复和tablespace id不一致处