[JZOJ5399]:Confess(随机化)
题目描述
小$w$隐藏的心绪已经难以再隐藏下去了。
小$w$有$n+1$(保证$n$为偶数)个心绪,每个都包含了$[1,2n]$的一个大小为$n$的子集。
现在他要找到隐藏的任意两个心绪,使得他们的交大于等于$\frac{n}{2}$。
输入格式
一行一个整数$n$。
接下来每行一个长度为$k$的字符串,该字符串是一个$64$进制表示,$ASCII$码为$x$的字符代表着$x-33$,所有字符在$33$到$33+63$之间。
转为二进制表示有$6k$位,它的前$2n$个字符就是读入的集合,第$i$位为$1$表示这个集合包含$i$,为$0$表示不包含。
输出格式
一行两个不同的整数表示两个集合的编号。
如果无解输出$"NO\ Solution"$。
样例
样例输入:
10
EVK#
IH=#
676"
R7,#
74S"
6V2#
O3J#
S-7$
NU5"
C[$$
3N.#
样例输出:
1 2
数据范围与提示
对于$20\%$的数据满足$n\leqslant 100$。
对于$50\%$的数据满足$n\leqslant 1\times 10^3$。
对于$100\%$的数据满足$n\leqslant 6\times 10^3$。
题解
随机化竟然是正解,还好我机灵了一下。
官方题解我也是醉了……
用$bitset$优化一下就好啦。
两个集合的交的期望大小为:
$$\min(\sum\limits_{i=1}^{2n}\frac{C_{c_i}^2}{C_{n+1}^2}|\sum\limits_{i=1}^{2n}c_i=n(n+1))=\frac{n-1}{2}$$
至少需要$n$对就好了。
时间复杂度:$\Theta(\frac{n^2}{\omega})$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
int n;
int bin[9];
char ch[10000];
bitset<12000> bit[6010];
int main()
{
scanf("%d",&n);
for(int i=0;i<6;i++)bin[i+1]=1<<i;
for(int i=1;i<=n+1;i++)
{
scanf("%s",ch+1);
int len=strlen(ch+1);
int top=0;
for(int j=1;j<=len;j++)
{
int x=ch[j]-33;
if(++top>2*n)break;
if(x&bin[6])bit[i][top]=1;
if(++top>2*n)break;
if(x&bin[5])bit[i][top]=1;
if(++top>2*n)break;
if(x&bin[4])bit[i][top]=1;
if(++top>2*n)break;
if(x&bin[3])bit[i][top]=1;
if(++top>2*n)break;
if(x&bin[2])bit[i][top]=1;
if(++top>2*n)break;
if(x&bin[1])bit[i][top]=1;
}
}
while(1)
{
int x=rand()%(n+1)+1;
int y=rand()%(n+1)+1;
if(x==y)continue;
if((bit[x]&bit[y]).count()>=(n>>1))
{printf("%d %d\n",x,y);return 0;}
}
return 0;
}
rp++
[JZOJ5399]:Confess(随机化)的更多相关文章
- APP漏洞扫描用地址空间随机化
APP漏洞扫描用地址空间随机化 前言 我们在前文<APP漏洞扫描器之本地拒绝服务检测详解>了解到阿里聚安全漏洞扫描器有一项静态分析加动态模糊测试的方法来检测的功能,并详细的介绍了它在针对本 ...
- rabin 素性检验 随机化算法
#include <cstdio> #include <cstdlib> #include <ctime> typedef long long int LL; in ...
- [USACO2005][POJ2454]Jersey Politics(随机化)
题目:http://poj.org/problem?id=2454 题意:给你3*k(k<=60)个数,你要将它们分成3个长度为k的序列,使得其中至少有两个序列的和大于k*500 分析:以为有高 ...
- POJ 矩阵相乘 (随机化算法-舍伍德(Sherwood))
周三的算法课,主要讲了随机化算法,介绍了拉斯维加斯算法,简单的理解了为什么要用随机化算法,随机化算法有什么好处. 在处理8皇后问题的时候,穷举法是最费时的,回朔比穷举好点,而当数据量比较大的时候,如1 ...
- POJ3318--Matrix Multiplication 随机化算法
Description You are given three n × n matrices A, B and C. Does the equation A × B = C hold true? In ...
- hdu 4739 Zhuge Liang's Mines 随机化
Zhuge Liang's Mines Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.p ...
- 惊艳的随机化方法 -World Search (homework-04)
homeword04-word search 0. 摘要 本次作业,要求完成一个word search的程序,具体要求是: 输入:一个包含20-60个单词的文件,各单词不大于20个字母,无空格. 输出 ...
- Codeforces Round #192 (Div. 1) C. Graph Reconstruction 随机化
C. Graph Reconstruction Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/3 ...
- poj 2454 Jersey Politics 随机化
随机化算法+贪心! 将3*k排序后分成3分,将第二第三份的和分别加起来,让和与500*k比较,都大于则输出,否则,随机生成2个数,在第二第三份中交换! 代码如下: #include<iostre ...
随机推荐
- 安装PIG
下载Pig 能够执行在Hadoop 0.20.* http://mirror.bit.edu.cn/apache/pig/pig-0.11.1/pig-0.11.1.tar.gz 也能够依据你的Had ...
- Jquery table相关--工时系统
1.jquery 的弹出对话框,单击事件之后 if (confirm("确定要删除?")) { // //点击确定后操作 } 2.对某个table中的checkbox是否被选中的遍 ...
- [转载]C++之using namespace std 详解与命名空间的使用
来源:https://blog.csdn.net/Bruce_0712/article/details/72824668 所谓namespace,是指标识符的各种可见范围.C++标准程序库中的所有标识 ...
- 比特(bit)和字节(Byte)
比特(bit)和字节(Byte) 基础的内容就不说了,这里是一个小的学习笔记 比特和字节的写法差异与应用场景 标准的写法中,正如标题中写的那样,是通过大小写来区分比特和字节的:比特的b应该是小写,而字 ...
- CSDN添加文章目录
在发表的文章中,系统根据文章中H1到H6标签自动生成文章目录. 一.发表文章的时候合理使用“标题”标签. 二.目录生成.只要在文章中使用了“标题1”这样的功能,就可以在博文开头看到文章的目录.
- Object 对象(对象的分类、属性(属性名和属性值)、基本数据类型与引用数据类型区别)
Object——引用数据类型 基本数据类型的不足之处:基本数据类型是单一的值,不能表现出值与值之间的所属关系 object分为内建对象.宿主对象和自定义对象 a 内建对象:ES标准中定义的对象,在任何 ...
- 第十篇.2、python并发编程之多进程
一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.P ...
- Excel 曝Power Query安全漏洞
近日,Mimecast 威胁中心的安全研究人员,发现了微软 Excel 电子表格应用程序的一个新漏洞,获致 1.2 亿用户易受网络攻击.其指出,该安全漏洞意味着攻击者可以利用 Excel 的 Powe ...
- c# 6.0、c#7.0、c#8.0新特性
官方: https://docs.microsoft.com/zh-cn/dotnet/articles/csharp/whats-new/csharp-6 https://docs.microsof ...
- Cuda9.0安装
CUDA 9.0安装笔记 最近实验室新购买两块K80的GPU.作为好奇的小猪,当然会自报奋勇去配置环境.在这篇博客中将会介绍在centos7下配置CUDA 9.0的步骤. 1. 什么是CUDA? 引用 ...