2023牛客暑期多校训练营7

Beautiful Sequence 贪心,二进制,构造

Cyperation 模拟 ,数学

We Love Strings 分块,二进制枚举,二进制容斥dp

Writing Books 签到

 

 

 根据相邻两个异或值B,因为前小于等于后,故从高到低遍历B的每一位时,第一个是1的位置,一定决定了前者与后者的大小关系。且前者这一位必定是0,后者这一位必定是1。有根据B的前缀异或和是A1^Ai,如果A1^Ai这一位是0,那么A1这一位必定填1,否则必定填0。

这样处理之后,A1会形成若干确定的填法。而对于剩余没能确定的,也就是字典序产生的由来。继续从高到低遍历每一位,当前位置i若没有确定,如果位置i之前(所有小于位置i)的有x的没有确定的,那么当前填0的贡献为(1<<x),这一贡献如果大于等于k,这一位就必定是0,否则,这一位必定是1。

 

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int N=1e6+5;
long long n,k,b[N],T,c[N],d[50];
ll qp(ll base,ll pow)
{ll ans=1;while(pow){if(pow&1)ans=ans*base;pow>>=1;base=base*base;}return ans;
}
int main()
{cin>>T;while(T--){cin>>n>>k;int f=1;for(int i=1; i<n; i++)cin>>b[i],c[i]=c[i-1]^b[i];int t=0;memset(d,-1,sizeof(d));for(int i=1; i<n&&f; i++){for(int j=29; j>=0; j--){if(b[i]>>j) {if(d[j]!=-1&&d[j]!=1^((c[i]>>j)&1)){f=0;break;}d[j]=1^((c[i]>>j)&1);break;}}}int pre[50];memset(pre,0,sizeof(pre));pre[0]=(d[0]==-1);for(int i=1; i<=29; i++){pre[i]=pre[i-1];if(d[i]==-1)pre[i]++;}for(int i=29; i>=1; i--){if(d[i]==-1){ll temp=qp(2ll,pre[i-1]);if(k<=temp){d[i]=0;}else{d[i]=1;k-=(temp);}}}if(d[0]==-1){if(k==1){d[0]=0;}else if(k==2){d[0]=1;k=1;}}if(k>1||f==0)puts("-1");else{int p=0;for(int i=29; i>=0; i--){p=p<<1|d[i];}for(int i=0; i<n; i++){printf("%d ",(p^c[i]));}puts("");}}
}

 

 

 

 首先一个大环可以拆成若干互不影响的小环。先拆环为链,即设a1和ak共同减去了x,则接下来的删除,是固定方向的,由a1开始到ak结束。上图为偶数情况,一个合法的x,要满足每一轮相减的剩余量都大于等于0,最后的a4剩余量为0.这一过程,维护x的取值范围,判断合法即可。

对于奇数同理,只是多了一个判断剩余量是否能够整除2,和整除解出来的x是否合法。

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
int vis[1000000+10],a[1000000+10];
int main()
{cin.tie(0);ios::sync_with_stdio(0);int t;cin>>t;while(t--){int n,k;cin>>n>>k;int zero=0;for(int i=1; i<=n; i++){cin>>a[i];if(a[i])zero=1;vis[i]=0;}if(k>n/2){if(zero){cout<<"NO"<<'\n';}elsecout<<"YES"<<'\n';continue;}int flag=1;for(int i=1; i<=n; i++){if(vis[i])continue;int now=i;ll temp=0;int op=1;ll L=-1e18,R=1e18;//cout<<" ===== "<<endl;while(!vis[now]){vis[now]=1;//  cout<<now<<" ";if(op==1){R=min(R,a[now]-temp);}else{L=max(L,temp-a[now]);}op^=1;temp=a[now]-temp;now+=k;now%=n;if(now==0)now=n;}if(L>R){flag=0;break;}if(op==1){if(temp==0)continue;flag=0;}if(op==0){if(temp%2){flag=0;continue;}temp/=2;if(temp<L||temp>R){flag=0;continue;}}}if(flag==0){cout<<"NO"<<'\n';}else{cout<<"YES"<<'\n';}}return 0;
}

 

这题可以分块做,400给的很巧妙,这就意味这长度小于20的,可以暴力枚举,长度大于20的,不会超过20个,仍然可以暴力枚举。

对于前者,相同长度的可以暴力枚举每一位01情况,然后进行检查,一旦检查出可以的,就答案++

对于后者,也是相同长度的暴力枚举,但枚举方式变为,这x个字符串哪个参与匹配,哪个不参与。对于一个枚举出的方案,若合法(已知位置不冲突),则这一方案的方案数为其不确定位置的个数的2次幂。但直接统计肯定会有重复。因为如2 3 4组成的集合方案数,就包含了2 3 4 5的方案数。这种重复出现在,2 3 4组成集合的问号区域,乘了2,这个2就包含了2 3 4 5的部分。故需要从2 3 4方案数里面减去。按照二进制容斥原理来说,就是满足小集合的方案数里面包含了满足大集合的,需要从小集合里面容斥掉大集合的。

#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
vector<string>v[410];
int n;
ll ans;
# define mod 998244353
void workxiao(int len)
{if(v[len].size()==0)return ;for(int i=0;i<(1<<len);i++){for(auto it:v[len]){int flag=0;for(int j=0;j<len;j++){if((i&(1<<j))){if(it[j]=='0')flag=1;}else{if(it[j]=='1')flag=1;}}if(flag==0){ans++;ans%=mod;break;}}}
}
ll dp[(1<<22)],pre[410];
void init()
{pre[0]=1;for(int i=1;i<=400;i++){pre[i]=pre[i-1]*2ll%mod;}
}
int check(string now)
{int ans=0;for(int i=0;i<now.length();i++){ans+=(now[i]=='?');}return ans;
}
void workda(int len)
{if(v[len].size()==0)return ;int nown=v[len].size();string temp="";for(int i=0;i<len;i++){temp+='?';}for(int i=1;i<(1<<nown);i++){dp[i]=0;string now=temp;int flag=0;for(int j=0;j<nown;j++){if((i&(1<<j))){for(int k=0;k<len;k++){if(v[len][j][k]!='?'){if(now[k]=='?'){now[k]=v[len][j][k];}else{if(now[k]!=v[len][j][k]){flag=1;break;}}}}}if(flag)break;}if(flag==0)dp[i]=pre[check(now)];}for(int i=1;i<(1<<nown);i++){for(int j=0;j<nown;j++){if((i&(1<<j))){dp[(i^(1<<j))]=((dp[(i^(1<<j))]-dp[i])%mod+mod)%mod;}}}for(int i=1;i<(1<<nown);i++){ans+=dp[i];ans%=mod;}}
int main()
{init();cin>>n;for(int i=1;i<=n;i++){string s;cin>>s;v[(int)(s.length())].push_back(s);}for(int i=1;i<=20;i++){workxiao(i);}for(int i=21;i<=400;i++){workda(i);}cout<<ans;return 0;
}

 

 

签到题,不赘述 

 

 

 

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

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

相关文章

AT89C51单片机实现单片机串口互动(中断方式,单片机--单片机,应答)

说一下功能&#xff1a;客户机发送0x01到服务机 2服务单片机应答0xf2到客户机 3客户机接收到0xf2,发送信息153432这6个数字到服务机 4client发送完信息后发送0xaa结束通信 5server接收到0xaa后回复0xaa结束通信&#xff0c;从此老死不相往来 看代码&#xff1a; //发送端…

C语言 ——函数指针变量

1、概念&#xff1a; 数组指针 - 是指针-是指向数组的指针&#xff0c;是存放数组地址的指针 函数指针 - 是指针 是指向函数的指针 - 是存放函数地址的指针!! 如上所示&#xff0c;函数也是具有地址的&#xff0c;而存放函数地址的指针变量成为函数指针变量。 而有如上所示&a…

构建Docker容器监控系统(2)(Cadvisor +Prometheus+Grafana)

Cadvisor产品简介 Cadvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行Cadvisor用户可以轻松的获取到当前主机上容器的运行统计信息&#xff0c;并以图表的形式向用户展示。 接着上一篇来继续 部署Cadvisor 被监控主机上部署Cadvisor容器…

【Kafka】1.Kafka简介及安装

目 录 1. Kafka的简介1.1 使用场景1.2 基本概念 2. Kafka的安装2.1 下载Kafka的压缩包2.2 解压Kafka的压缩包2.3 启动Kafka服务 1. Kafka的简介 Kafka 是一个分布式、支持分区&#xff08;partition&#xff09;、多副本&#xff08;replica&#xff09;、基于 zookeeper 协调…

Qt5开发视频播放器

一、播放器界面UI设计 控件对象名位置&#xff08;坐标点&#xff09;对象名称组件名称备注Widget(0, 0, 809, 572)WidgetQWidgetlabellabelQLabel播放窗口label_2label_2QLabelvoice_controlvoice_controlQSlider音量滑动条btn_openbtn_openQPushButton打开文件按钮label_4la…

ThreadLLocal的学习

ThreadLocal的学习 ThreadLocal的学习1.ThreadLocal是什么&#xff1f;2.ThreadLocal的数据结构Java的四种引用类型 3.ThreadLocal为什么会出现内存泄露&#xff1f;既然会出现内存泄露为什么Entry的key还要使用弱引用&#xff1f;如何避免内存泄露&#xff1f; ThreadLocal的学…

最新版本2023UI千月影视APP源码 开源完美版前后端完美匹配 后端基于ThinkPHP框架

最新版本的2023UI千月影视APP源码是一款开源的完美版应用程序&#xff0c;具备前后端完美匹配的特点。该应用的后端开发基于ThinkPHP框架&#xff0c;这是一个广泛使用的PHP开发框架&#xff0c;具有稳定性和安全性方面的优势。 2023UI千月影视APP是一款提供电影、电视剧、综艺…

Clickhouse学习系列——一条SQL完成gourp by分组与不分组数值计算

笔者在近一两年接触了Clickhouse数据库&#xff0c;在项目中也进行了一些实践&#xff0c;但一直都没有一些技术文章的沉淀&#xff0c;近期打算做个系列&#xff0c;通过一些具体的场景将Clickhouse的用法进行沉淀和分享&#xff0c;供大家参考。 首先我们假设一个Clickhouse数…

智能合约 -- 常规漏洞分析 + 实例

1.重入攻击 漏洞分析 攻击者利用合约漏洞&#xff0c;通过fallback()或者receive()函数进行函数递归进行持续取钱。 刚才试了一下可以递归10次&#xff0c;貌似就结束了(version: 0.8.20)。 直接看代码: 银行合约&#xff1a;有存钱、取钱、查看账户余额等函数。攻击合约:…

第04天 Spring是如何解决循环依赖的

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

【VUE】7、VUE项目中集成watermark实现页面添加水印

在网站浏览中&#xff0c;常常需要网页水印&#xff0c;以便防止用户截图或录屏暴露敏感信息后&#xff0c;方便追踪用户来源。 1、安装 watermark 在 package.json 文件 dependencies 节点增加 watermark-dom 依赖 "watermark-dom": "2.3.0"然后执行命…

Petrel解释二维浅地层数据

Petrel是斯伦贝谢开发的一款地质解释和建模软件&#xff0c;有点像地理信息系统的ArcGIS&#xff0c;主要用于数据分析和展示。它不是用来处理原始数据的&#xff0c;而是集成各种处理后的结果数据进行特征分析和目标拾取。当然&#xff0c;它也能读取原始数据&#xff0c;比如…

Vue 3.0中的Treeshaking?

1.treeshaking是什么&#xff1f; Tree shaking 是一种通过清除多余代码方式来优化项目打包体积的技术&#xff0c;专业术语叫 Dead code elimination 简单来讲&#xff0c;就是在保持代码运行结果不变的前提下&#xff0c;去除无用的代码 如果把代码打包比作制作蛋糕&#…

5. 服务发现

当主机较少时&#xff0c;在抓取配置中手动列出它们的IP地址和端口是常见的做法&#xff0c;但不适用于较大规模的集群。尤其不适用使用容器和基于云的实例的动态集群&#xff0c;这些实例经常会变化、创建或销毁的情况。 Prometheus通过使用服务发现解决了这个问题&#xff1…

EFLFK——ELK日志分析系统+kafka+filebeat架构(3)

zookeeperkafka分布式消息队列集群的部署 紧接上期&#xff0c;在ELFK的基础上&#xff0c;添加kafka做数据缓冲 附kafka消息队列 nginx服务器配置filebeat收集日志&#xff1a;192.168.116.40&#xff0c;修改配置将采集到的日志转发给kafka&#xff1b; kafka集群&#xff…

(5)所有角色数据分析页面的构建-5

所有角色数据分析页面&#xff0c;包括一个时间轴柱状图、六个散点图、六个柱状图(每个属性角色的生命值/防御力/攻击力的max与min的对比)。 """绘图""" from pyecharts.charts import Timeline from find_type import FindType import pandas …

RN 使用react-navigation写可以滚动的横向导航条(expo项目)

装包&#xff1a; yarn add react-navigation/material-top-tabs react-native-tab-view npx expo install react-native-pager-view import React from react import { View, Text, ScrollView, SafeAreaView } from react-native import { Icon } from ../../../../../compo…

栈和队列详解

目录 栈 栈的概念及结构&#xff1a; 栈的实现&#xff1a; 代码实现&#xff1a; Stack.h stack.c 队列&#xff1a; 概念及结构&#xff1a; 队列的实现&#xff1a; 代码实现&#xff1a; Queue.h Queue.c 拓展&#xff1a; 循环队列&#xff08;LeetCode题目链接&#xff0…

机器学习基础08-回归算法矩阵分析(基于波士顿房价(Boston House Price)数据集)

回归算法通常涉及到使用矩阵来表示数据和模型参数。线性回归是最常见的回归算法之一&#xff0c;它可以用矩阵形式来表示。 考虑一个简单的线性回归模型&#xff1a; y m x b y mx b ymxb&#xff0c;其中 y y y 是因变量&#xff0c; x x x 是自变量&#xff0c; m m m 是…

美团视觉GPU推理服务部署架构优化实战

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…