[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 ...
随机推荐
- Codeforces 1190A. Tokitsukaze and Discard Items
传送门 显然从左到右考虑每个要删除的数 维护一个 $cnt$ 表示之前已经删除了 $cnt$ 个数,那么当前所有要删除数的实际位置就要减去 $cnt$ 直接暴力枚举哪些数在最左边一个块然后一起删除 每 ...
- 搭建springCloud网关zuul
一.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...
- golang(3):strings和strconv使用 & 时间和日期类型 & 指针类型 & 流程控制 & 函数
strings和strconv使用 . strings.HasPrefix(s string, prefix string) bool: // 判断字符串s是否以prefix开头 . . string ...
- celery 分布式异步队列框架使用方法
简介: Celery 是一个python开发的异步分布式任务调度模块,是一个消息传输的中间件,可以理解为一个邮箱,每当应用程序调用celery的异步任务时,会向broker传递消息,然后celery ...
- 09 Scrapy框架以及基本使用
一.什么是scrapy? 是为了爬取网站数据,提取结构性数据而编写的应用框架.之所以叫做框架是因为集成了各种实用功能(高性能异步下载,队列,分布式,解析,持久化等等)的项目模板.对于框架的学习,重点是 ...
- 好用的 python 工具集合
图标处理小程序, 妈妈再也不用担心我不会制作图标了 # PythonMargick包可以到Unofficial Windows Binaries for Python Extension Packag ...
- OpenSSL(1)密钥和证书管理
OpenSSL是一个开源项目,包括密码库和SSL/TLS工具集. 从项目的官方站点可以看到: OpenSSL项目是安全套接字层( secure sockets layer, SSL)和传输层安全( t ...
- oracle 12C的新特性-CDB和PDB
1.前言 CDB与PDB是Oracle 12C引入的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插 ...
- HQL实现模糊查询
hibernate 实现模糊查询两种传参方式,其实各个方法的实质都是一样的,只不过传递参数的方法稍微有点区别 public List<User> getUsers(String id){ ...
- Python基础:深浅拷贝
对于数字.字符串深浅拷贝: import copy num = 0 copy_num = copy.copy(num) print("These are normal copy") ...