百度之星资格赛 调查问卷 bitset模板(直接将字符串转化成二进制数组并可以计算出十进制值)
度度熊为了完成毕业论文,需要收集一些数据来支撑他的论据,于是设计了一份包含 mm 个问题的调查问卷,每个问题只有 'A' 和 'B' 两种选项。
将问卷散发出去之后,度度熊收到了 nn 份互不相同的问卷,在整理结果的时候,他发现可以只保留其中的一部分问题,使得这 nn 份问卷仍然是互不相同的。这里认为两张问卷是不同的,当且仅当存在至少一个被保留的问题在这两份问卷中的回答不同。
现在度度熊想知道,存在多少个问题集合,使得这 nn 份问卷在只保留这个集合的问题之后至少有 kk 对问卷是不同的。
第一行包含一个整数 TT,表示有 TT 组测试数据。
接下来依次描述 TT 组测试数据。对于每组测试数据:
第一行包含三个整数 nn,mm 和 kk,含义同题目描述。
接下来 nn 行,每行包含一个长度为 mm 的只包含 'A' 和 'B' 的字符串,表示这份问卷对每个问题的回答。
保证 1 \leq T \leq 1001≤T≤100,1 \leq n \leq 10^31≤n≤103,1 \leq m \leq 101≤m≤10,1 \leq k \leq 10^61≤k≤106,给定的 nn 份问卷互不相同。
对于每组测试数据,输出一行信息 "Case #x: y"(不含引号),其中 x 表示这是第 xx 组测试数据,y 表示满足条件的问题集合的个数,行末不要有多余空格。
2
2 2 1
AA
BB
2 2 2
AA
BB
Case #1: 3
Case #2: 0
参考博客:https://blog.csdn.net/nuclear_physis/article/details/81414833
分析:我们将A-B的问题序列转化成为0-1二进制序列从而转为整数特征,而问题子集情况也可以使用0-1进制序列表示。通过位运算就可以表示问题子集对应的问题结果0-1序列,进而转为整数特征。先将n个问卷的问题特征值排序。排序后就可以清晰得到相同问题问卷数目,比如有这样的排序结果[1 2 2 3 3],那么问卷2 和 3的问题是一样的,问卷 4 和 5 的是一样的。通过相同问题数目就可以很容易得到相同问题问卷的对数。我们想如果将总的问题对数减去相同的问题的问卷对数那么就得到了不一样问卷的对数。上面的例子就是5 * 4 / 2 - 2 * 1 / 2 - 2 * 1 / 2 等于8。
AC代码:
#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <cstdio>
#include <vector>
#include <string>
#include <bitset>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <algorithm>
#define ls (r<<1)
#define rs (r<<1|1)
#define debug(a) cout << #a << " " << a << endl
using namespace std;
typedef long long ll;
const ll maxn = 2*1e3+10;
const ll mod = 998244353;
ll n, m, k, ans;
ll a[maxn], b[maxn];
bool ok( ll x ) {
for( ll i = 1; i <= n; i ++ ) {
b[i] = a[i]&x;
}
map<ll,ll> mp;
for( ll i = 1; i <= n; i ++ ) { //二进制整数值相容代表调查问卷相同
mp[b[i]] ++;
}
ll total = n*(n-1)/2;
for( auto it : mp ) {
if( it.second > 1 ) {
total = total - it.second*(it.second-1)/2;
}
}
if( total >= k ) {
return true;
} else {
return false;
}
}
int main() {
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
ll T, t = 1;
scanf("%lld",&T);
while( T -- ) {
scanf("%lld%lld%lld",&n,&m,&k);
for( ll i = 1; i <= n; i ++ ) {
char str[maxn];
scanf("%s",str);
for( ll i = 0; i < strlen(str); i ++ ) {
if( str[i] == 'A' ) {
str[i] = '0';
} else {
str[i] = '1';
}
}
bitset<12> bs(str);
a[i] = bs.to_ulong();
}
ans = 0;
for( ll i = 1; i <= (1<<m)-1; i ++ ) { //问题的所有子集转化为求每个子集对应的二进制整数
if( ok(i) ) {
ans ++;
}
}
printf("Case #%lld: %lld\n",t++,ans);
}
return 0;
}
百度之星资格赛 调查问卷 bitset模板(直接将字符串转化成二进制数组并可以计算出十进制值)的更多相关文章
- 2016百度之星 资格赛ABCDE
看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php ...
- HDU 5688:2016"百度之星" - 资格赛 Problem D
原文链接:https://www.dreamwings.cn/hdu5688/2650.html Problem D Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5686:2016"百度之星" - 资格赛 Problem B
原文链接:https://www.dreamwings.cn/hdu5686/2645.html Problem B Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5685:2016"百度之星" - 资格赛 Problem A
原文链接:https://www.dreamwings.cn/hdu5685/2637.html Problem A Time Limit: 2000/1000 MS (Java/Others) ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
- 模拟 2015百度之星资格赛 1003 IP聚合
题目传送门 /* 模拟水题,排序后找出重复的ip就可以了 */ #include <cstdio> #include <iostream> #include <algor ...
- 模拟 百度之星资格赛 1003 IP聚合
题目传送门 /* 模拟水题,排序后找出重复的ip就可以了 */ #include <cstdio> #include <iostream> #include <algor ...
- HDU - 6344 2018百度之星资格赛 1001调查问卷(状压dp)
调查问卷 Accepts: 1289 Submissions: 5642 Time Limit: 6500/6000 MS (Java/Others) Memory Limit: 262144 ...
- 2014百度之星资格赛——Disk Schedule
2014百度拥有明星格比赛--Disk Schedule Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取. 为了提高效率.须要人为安排磁盘读取. 然而.在 ...
随机推荐
- .net core(c#)拟合圆测试
说明 很多时候,我们需要运动物体的转弯半径去描述其机器性能.但在大多数的现实条件下,我们只能够获取到运动物体的 GPS 位置点集,并不能直接得到转弯半径或者圆心位置.为此,我们可以利用拟合圆的方式得到 ...
- LDAP 服务搭建和后期管理
LDAP 服务 本文主要在debian配置,如果需要在CentOS上部署,需要修改大部分的路劲,这里需要自行修改. LDAP 服务按照个人理解,也可使理解为一个数据库,但是这个数据库的读写性能不像 M ...
- 理解分布式一致性与Raft算法
理解分布式一致性与Raft算法 永远绕不开的CAP定理 出于可用性及负载方面考虑,一个分布式系统中数据必然不会只存在于一台机器,一致性简单地说就是分布式系统中的各个部分保持数据一致 但让数据保持一致往 ...
- MRCPv2在电信智能语音识别业务中的应用
1. MRCPv2协议简介 媒体资源控制协议(Media Resource Control Protocol, MRCP)是一种基于TCP/IP的通讯协议,用于客户端向媒体资源服务器请求提供各种媒体资 ...
- Qt Socket 收发图片——图像拆包、组包、粘包处理
之前给大家分享了一个使用python发图片数据.Qt server接收图片的Demo.之前的Demo用于传输小字节的图片是可以的,但如果是传输大的图片,使用socket无法一次完成发送该怎么办呢?本次 ...
- Docker相关地址
Docker社区版(CE)地址: https://hub.docker.com/search/?type=edition&offering=community Docker文档地址: http ...
- Unity经典游戏编程之:球球大作战
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- 让techempower帮你通讯服务框架的性能
在编写服务应用框架的时候一般都需要进行性能测试,但自己测试毕竟资源受限所以很难做更高性能上的测试.其实GitHub上有一个项目可以让开发人员提交自己的框架服务代码然后进行一个标准测试:现在已经有上百个 ...
- A solution to the never shortened to-do list
I once told my younger sister my learning system, and the basic five doctrines of my methodology. Bu ...
- springMVC(一) --前端控制器(DispatcherServlet)的作用
SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架,首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户 ...