ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

河南萌新联赛2026第(六)场:郑州大学L题(构造,位运算,毒酒问题)

河南萌新联赛2026第(六)场:郑州大学L题(构造,位运算,毒酒问题) 题目链接L-神秘数字_河南萌新联赛2026第六场郑州大学题目大意msj给定一个正整数n神秘数字x1xn我们可以构造出若干集合对于每个集合msj会如实回答x是否该集合中求出可以找到x的最少集合的数目构造方案题目思路这是一道典型的毒酒问题我们可以通过二进制来解决这个问题具体分析如下对于每个集合我们可以看为二进制的每一位那么我们至少需要的二进制位数是mlog2(n),因为2^m必须n如果n,那么无法有效推断其中m就是我们需要找到x的最少集合的数目这里m的最大值是不超过15的因为n最大才1e5至于对于每个集合如何求对于每个集合我们可以从1开始枚举到n如果(x(1bit)),那么说明x是该集合需要的数字因为只有当二进制位同1时该位才可能为答案做出贡献也就是第i个集合包含所有第i位为1的数字类似第i个犯人品尝所有第i位为1的酒代码如下时间复杂度O(15*n)#include bits/stdc.h using namespace std; using i128 __int128; #define int long long #define endl \n void solve() { int n; cin n; int m ceil(log2(n)); cout m endl; for (int bit 0; bit m;bit){ vectorint ans; for (int x 1; x n;x){ if(x(1bit)){ ans.push_back(x); } } cout ans.size(); for(auto i:ans){ cout i; } cout endl; } } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T 1; // cin T; while (T--) { solve(); } return 0; }
返回列表