[USACO23OPEN] Field Day S

题目描述

Each of Farmer John’s N N N barns has selected a team of C C C
cows to participate in field day. The breed of every cow is
either a Guernsey or a Holstein.

The difference between two teams is defined to be the number of positions i i i
( 1 ≤ i ≤ C 1 \leq i \leq C 1iC) at which the breeds of the cows in the i i i th positions
differ. For every team t t t from 1 … N 1 \ldots N 1N, please compute the maximum
difference between team t t t and any other team.

翻译

N N N 个长度为 C C C 的由字符 Gc 组成的字符串。对于每个字符串,求出它与其他字符串不同位置数量的最大值。

题解

这里提供一个不同的思路。

首先把每个字符串压缩成一个数。数的范围显然是 [ 0 , 2 C ) [0,2^C) [0,2C),记第 i i i 个字符串对应的数为 a i a_i ai

对于第 i i i 个询问,答案等于 max ⁡ j ∈ [ 1 , N ] popcount ⁡ ( a i ⊕ a j ) \max\limits_{j\in[1,N]}\operatorname{popcount}(a_i\oplus a_j) j[1,N]maxpopcount(aiaj)

如果暴力做,时间复杂度是 O ( N 2 ) O(N^2) O(N2) 的,不能通过。

换一个思路,从大到小枚举答案 x x x,判断是否可行。若存在 y ∈ [ 0 , 2 C ) , j ∈ [ 1 , N ] y\in[0,2^C),j\in[1,N] y[0,2C),j[1,N],使得 popcount ⁡ ( y ) = x \operatorname{popcount}(y)=x popcount(y)=x,且 y ⊕ a j = a i y\oplus a_j=a_i yaj=ai,就是可行的。

观察关键条件: y ⊕ a j = a i y\oplus a_j=a_i yaj=ai,这让我们联想到 F W T FWT FWT

a a a 中的各个元素丢进桶 t t t 里面,对于所有 j ∈ [ 0 , 2 C ) j\in[0,2^C) j[0,2C),按照二进制 1 1 1 的个数归类,也按照类丢进桶里。然后对于每个类与 t t t 进行 F W T FWT FWT。在判断时,只需要判断下标 a i a_i ai 的数是否大于 0 0 0 即可。

时间复杂度为 O ( C 2 ⋅ 2 C ) O(C^2\cdot2^C) O(C22C)

F W T FWT FWT 数组记得开 long long,可能需要一些卡常技巧。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int C=18,N=1e5+1;
int c,n;
char s[C];
ll a[N],t[1<<C],b[C+1][1<<C],cnt[1<<C];
void fwt_xor(ll a[],int fl)
{int n=1<<c;for(int i=2;i<=n;i<<=1){for(int j=0;j<n;j+=i){for(int k=j;k<j+i/2;k++){ll x=a[k]+a[k+i/2],y=a[k]-a[k+i/2];a[k]=x>>(fl==-1),a[k+i/2]=y>>(fl==-1);}}}
}
int main()
{scanf("%d%d",&c,&n);for(int i=0;i<(1<<c);i++) cnt[i]=cnt[i>>1]+(i&1),b[cnt[i]][i]=1;for(int i=1;i<=n;i++){scanf("%s",s);for(int j=0;j<c;j++) a[i]=(a[i]<<1)|(s[j]=='G');t[a[i]]++;}fwt_xor(t,1);for(int i=0;i<=c;i++){fwt_xor(b[i],1);for(int j=0;j<(1<<c);j++) b[i][j]=b[i][j]*t[j];fwt_xor(b[i],-1);}for(int i=1;i<=n;i++){for(int j=c;j>=0;j--){if(b[j][a[i]]){printf("%d\n",j);break;}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL(2)

建表 mysql> create table work(-> ‘部门号’ int(11) not null,-> ‘职工号’ int(11) not null,-> ‘工作时间’ date not null,-> ‘工资’ float(8,2) not null,-> ‘政治面貌’ varchar(10) not null default 群众,-> ‘姓名’ varchar(20) not nu…

人工智能(pytorch)搭建模型18-含有注意力机制的CoAtNet模型的搭建,加载数据进行模型训练

大家好,我是微学AI,今天我给大家介绍一下人工智能(pytorch)搭建模型18-pytorch搭建有注意力机制的CoAtNet模型模型,加载数据进行模型训练。本文我们将详细介绍CoAtNet模型的原理,并通过一个基于PyTorch框架的实例,展示如何加载数据,训练CoAtNet模型,从操作上理解该模型。…

ELK 企业级日志分析系统

目录 一&#xff1a;ELK 介绍 1、ELK 简介 2、filebeat 结合 logstash 好处 3、为什么要使用 ELK 4、完整日志系统基本特征 5、ELK 的工作原理 二&#xff1a;ELK Elasticsearch 集群部署 1、环境准备 2、部署 Elasticsearch 软件 &#xff08;1&#xff09;安装elasti…

在线考试系统

在线考试系统 简介 该系统由C#开发语言开发&#xff0c;数据库是sql server2016&#xff0c;前端用到的前端技术有Bootstrap&#xff0c;js&#xff0c;css等前端技术&#xff0c;同时用到的.Net Core MVC的技术框架。另外本系统也支持mysql&#xff0c;暂未调试。 该系统是…

Cause: org.postgresql.util.PSQLException: ERROR: syntax error at end of input

这个错误提示表明在 PostgreSQL 中存在语法错误&#xff0c;即查询语句的末尾存在语法问题。可能有以下几种情况导致这个错误&#xff1a; 查询语句未正确结束&#xff1a;请检查你的查询语句是否完整&#xff0c;包括所有的关键字、表名、列名和操作符等。确保查询语句以正确的…

计算机存储设备

缓存为啥比内存快 内存使用 DRAM 来存储数据的、也就是动态随机存储器。内部使用 MOS 和一个电容来存储。 需要不停地给它刷新、保持它的状态、要是不刷新、数据就丢掉了、所以叫动态 、DRAM 缓存使用 SRAM 来存储数据、使用多个晶体管(比如6个)就是为了存储1比特 内存编码…

Element-UI el-table属性row-class-name用法

文章目录 前言官方示例自定义条件样式设置背景颜色样式stripe属性 设置背景颜色样式设置字体颜色总结 前言 可以通过指定 Table 组件的 row-class-name 属性来为 Table 中的某一行添加 class&#xff0c;表明该行处于某种状态。 官方示例 代码如下&#xff1a; <el-table…

直播美颜SDK与智能美妆:技术融合的未来

对于许多直播主和观众来说&#xff0c;如何在直播中呈现最佳的外貌成为了一个重要问题。为了解决这个问题&#xff0c;直播美颜SDK与智能美妆技术的融合应运而生&#xff0c;为用户带来了前所未有的美妆体验。 简单来讲&#xff0c;直播美颜SDK可以理解为计算机视觉技术和人工…

MicroBlaZe 相关知识点

1.DDR3——存储.c的应用程序。需要两个时钟&#xff08;200MHZ输入&#xff0c;还有一个是特权同学的166.6m&#xff09; 2.QSPI FLASH——对flash进行固化&#xff08;1.需要50M外部时钟输入2.在SDK里面需要修改值为5&#xff09;。 3.MicroBlaZe的输入时钟&#xff08;mig输…

重磅预告丨Fortinet Demo Day系列实战攻防演练来袭!

随着网络安全形势的日趋严峻&#xff0c;越来越多的企业遭受了勒索、欺诈等危害。在高昂的赎金、生产损失&#xff0c;以及名誉损害的恐惧中&#xff0c;企业已经谈“黑”色变。黑客是如何悄无声息的“越过”重重高墙、道道壁垒进入到生产环境、办公空间&#xff0c;并在内网疯…

hydra详解(仅供学习参考)

一、概述。 Hydra是一款非常强大的渗透工具&#xff0c;由著名的黑客组织THC开发的一款开源工具。 二、使用方法。 hybra基础语法&#xff1a; hydra 参数 IP 服务 参数&#xff1a; -l login 小写&#xff0c;指定用户名进行破解 -L file 大写&#xff0c;指定用户的用户名…

loki技巧 - 结构化log日志文本

将非结构化的log日志信息结构化为JSON格式&#xff0c;以方便在Grafana界面侧的浏览和查询。 0. 目录 1. 需求背景和描述2. 实现&#xff08;Promtail侧&#xff09;3. 注意事项4. 后记5. 参考 1. 需求背景和描述 最近几个月&#xff0c;部门内部开始尝试统一日志收集、查询统…

Zotero翻译插件“zotero pdf translate”——使用时出现广告的问题的解决办法

一、背景&#xff1a; 在Zotero上安装了“zotero-pdf-translate”插件来辅助翻译。今天忽然发现&#xff0c;在使用CNKI翻译引擎的时候&#xff0c;末尾被加上了广告&#xff1a; (查看名企职位领高薪offer&#xff01;--->智联招聘https***dict.cnki.net/ad.html) 如下&…

MySQL(四)事务原理及分析

MySQL系列文章 MySQL&#xff08;一&#xff09;基本架构、SQL语句操作、试图 MySQL&#xff08;二&#xff09;索引原理以及优化 MySQL&#xff08;三&#xff09;SQL优化、Buffer pool、Change buffer MySQL&#xff08;四&#xff09;事务原理及分析 MySQL&#xff08;五&a…

Netty网络编程

参考文档 https://zhuanlan.zhihu.com/p/550956053 https://zhuanlan.zhihu.com/p/514448867 BIO 读取数据有两个阶段 等待数据就绪&#xff0c;数据到达内核缓冲区读取数据(系统调用)&#xff0c;从内核缓冲区&#xff0c;拷贝至用户缓冲区 BIO两个阶段都会阻塞 BIO编程时&…

分布式数据库HBase,它到底是怎么组成的?

原文链接&#xff1a;http://www.ibearzmblog.com/#/technology/info?id3f432a2451f5f9cb9a14d6e756036b67 前言 大数据的核心问题无非就是存储和计算这两个。Hadoop中的HDFS解决了数据存储的问题&#xff0c;而HBase就是在HDFS上构建&#xff0c;因此Hbase既能解决大数据存…

青岛大学_王卓老师【数据结构与算法】Week05_11_栈与递归_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c; 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础…

[sqoop]导入数据

一、覆盖导入 例如维度表&#xff0c;每次导入的数据需要覆盖上次导入的数据。 hive-overwrite参数&#xff1a;实现覆盖导入 hive-import参数&#xff1a;表示向hive表导入 hive-table参数&#xff1a;指定目标hive库表 sqoop import \ --connect jdbc:mysql://hadoop1:3…

哈希表的原理

哈希概念 线性表、树结构的查找方式都是以关键字的比较为基础&#xff0c;查找效率比较低&#xff0c;顺序表的时间复杂度是O&#xff08;n&#xff09;&#xff0c;平衡树中为树的高度&#xff0c;即O&#xff08;logn&#xff09;&#xff0c;搜素的效率取决于搜索过程的元素…

Spring-Interceptor拦截器

使用步骤 申明拦截器bean&#xff0c;并实现HandlerInterceptor接口 true为放行&#xff0c;false为拦截 2.定义配置类&#xff0c;继承WebMvcConfigurationSupport&#xff0c;实现addInterceptors方法&#xff0c;该方法调用具体的拦截器进行拦截 也可以在配子类通过实现W…