一些杂题(9.23)

news2024/11/24 7:16:04

八月赛

A. Extra Large Knapsack

我的思路

是否可行只要看所有异或在一起是否为0就可以了

可行的方案只要有一个在第一个包里,剩下的都在第二个包里就可以了

注意:n==1的时候不可行,要特判

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);
    int T;cin>>T;
    while(T--){
        int n;cin>>n;int sum=0,w=0;
        for(int i=0;i<n;i++){
            cin>>w;
            sum=sum^w;
        }
        if(n!=1&&!sum){
            cout<<"Yes\n";
            cout << 0;
            for(int i = 1; i < n; i++) cout << 1;
            cout<<'\n';
        }
        else{
            cout<<"No\n";
        }
    }
    return 0;
}

P4551 最长异或路径

P4551 最长异或路径t

题意:

前置知识 字符串Trie

之前学过string中的Trie,一个节点一共有26个指针,u是当前节点的编号,a[u][c-'a']用来存储下一个结点的序号

思路 XOR Trie+贪心

一道相比较而言更简单的题目:#10050.  The XOR Largest Pair 

上面这道题目中,把每个在a数组里的数字都遍历了,找a[i]能够找到的异或最大值,更新最后的最大值就可以了;因为一个数字最长32位,顺着Trie下去找32次就可以了;所以总时间复杂度是O(32n)

代码

注意1<<31要 long long

#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[10000005][2];int ans=0;int v[100005];int cnt=0;
void insert(int x){
    int p=0;
    for(int i=(long long)1<<31;i;i>>=1){
        if(i&x){
            if(!a[p][1]){a[p][1]=++cnt;}
            p=a[p][1];
        }
        else{
            if(!a[p][0]){a[p][0]=++cnt;}
            p=a[p][0];
        }
    }//上面在造树
    return;
}
int search(int x){
    int p=0;int sum=0;
    for(int i=(long long)1<<31;i;i>>=1){
        int flag=i&x;
        if(i&x){//如果当前是1,那就要找0
            if(a[p][0]){//如果0存在的话
                p=a[p][0];sum=sum|i;
            }
            else p=a[p][1];
        }
        else{
            if(a[p][1]){//如果1存在的话
                p=a[p][1];sum=sum|i;
            }
            else p=a[p][0];
        }
    }
    return sum;
} 
signed main()
{
    int n;cin>>n;
    for(int q=0;q<n;q++){
        cin>>v[q]; insert(v[q]);
    }
    for(int q=0;q<n;q++){
        ans=max(ans,search(v[q]));
    }
    cout<<ans;
    return 0;
}

会了上面这道题,再来看看P4551

思路

可以分为两个子问题,(1)所有结点到根结点的距离D(x) (2)D(x)数组中两个最大的异或和

第一个子问题可以用dfs来解决;第二个子问题可以用上面的01树解决

#include<bits/stdc++.h>
using namespace std;
#define int long long
vector<pair<int,int> >mp[100004];int n;
int D[100005];
int a[10000006][2];int cnt=0;int sum=0;
void dfs(int x,int fa,int w){
     for(auto q:mp[x]){
          D[x]=D[fa]^w;//
          if(q.first==fa)continue;
          dfs(q.first,x,q.second);
     }
}
void tinsert(int x){
    int p=0;
    for(int i=(long long)1<<31;i;i>>=1){
        if(i&x){
            if(!a[p][1]){a[p][1]=++cnt;}
            p=a[p][1];
        }
        else{
            if(!a[p][0]){a[p][0]=++cnt;}
            p=a[p][0];
        }
    }//上面在造树
    return;
}
int search(int x){
     int p=0;int ans=0;
     for(int i=(long long)1<<31;i;i>>=1){
          bool flag=i&x;
          if(a[p][!flag]){ans=ans|i;p=a[p][!flag];}
          else
               p=a[p][flag];
     }
     return ans;
}
signed main()
{
     cin>>n;
     for(int i=0;i<n-1;i++){
          int u,v,w;cin>>u>>v>>w;
          mp[u].push_back({v,w}); mp[v].push_back({u,w});
     }//树建好了
     dfs(1,0,0);//D[x]准备好了
     for(int i=1;i<=n;i++) tinsert(D[i]);//建字典树
     for(int i=1;i<n;i++) sum=max(sum,search(D[i]));
     cout<<sum;
     return 0;
}

CF126B Password

给你一个字符串S(|S|<=1000000),找到既是S前缀又是S后缀又在S中间出现过(既不是S前缀又不是S后缀)的最长子串,如果不存在输出“Just a legend”。

方法一 哈希

要注意的是找最长的字符串 符合二分的特性

#include<bits/stdc++.h>
using namespace std;
const int N = 1000000 + 5;
const unsigned long long base = 163;
string s;
unsigned long long has[N];
unsigned long long p[N];int n;
//unsigned long long 自动 mod 2^64
//s[]是读入的数组
//p[]预处理存储p的n次方,计算区间时候会用到
//hash[]存储对应字符串的哈希值
void init(){ //处理hash值
   p[0]=1; //p的0次方为1
   has[0]=0;
   n = s.size()-1;
   for(int i=1;i<=n;i++) p[i]=p[i-1]*base;
   for(int i=1;i<=n;i++) has[i]=has[i-1]*base+(s[i]-'a');
}
unsigned long long get(int l, int r){//取出g里[l,r]里面的字符串的hash值
    return has[r]-has[l-1]*p[r-l+1];
}
int main()
{
     cin>>s;s='#'+s;
     init();vector<int> dp;//从1开始到flag都是
     for(int i=1;i<n;i++){//可以不等于n,因为如果是n就是字符串自己了 // 不可以break
          if(get(1,i)==get(n-i+1,n)) {
               dp.push_back(i);
          }
     }
     int l=0,r=dp.size()-1,ans=0,mid;
     while(l<=r){
          mid=(l+r)/2;bool flag=0;
          for(int i=2;i+dp[mid]-1<n;i++){//dp[mid]是长度,不等于n是因为不能和后缀的相同
               if(get(1,dp[mid])==get(i,i+dp[mid]-1)){
                    ans=dp[mid];l=mid+1;
                    flag=1;break;//存在就可以break了
               }
          }
          if(!flag)r=mid-1;
     }
     if(!ans)cout<<"Just a legend\n";
     else cout<<s.substr(1,ans);

     return 0;
}

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

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

相关文章

手写Hystrix基本原理

本文已收录于专栏 《中间件合集》 目录 概念说明什么是HystrixHystrix解决的问题 提供服务工作流程代码实现HystrixSDKMyHystrixCommand注解MyHystrixProperty注解MyAspect注解解释器 发送请求端引入Hystrix的依赖调用代码 接收请求端执行效果发送请求端 总结提升 概念说明 什…

树莓集团又一力作,打造天府蜂巢成都直播产业园样板工程

树莓集团再次推出惊艳之作&#xff0c;以打造成都天府蜂巢直播产业园为目标。该基地将充分展现成都直播产业园的巨大潜力与无限魅力&#xff0c;成为一个真正的产业园样板工程。 强强联手 打造未来 成都天府蜂巢直播产业园位于成都科学城兴隆湖高新技术服务产业园内&#xff0…

毕业设计选题之Java+springboot线上蔬菜销售与配送系统(源码+调试+开题+lw)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

基于Java的药品管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

国庆节难忘回家路:趣事、风景、反思

文章目录 前言趣事游记旅途风光在人气爆棚的小七孔古桥大七孔在喯珠泻玉的拉雅瀑布奇异罕见的水上森林在云雾缭绕的鸳鸯湖在天然地宫——天钟洞飞瀑流泉 反思人们在死亡之前自己会有预感吗&#xff1f;求索生死大问 中秋国庆的规划后记 前言 中秋国庆&#xff0c;双节汇在一起…

8、绩效看板与日清计划

6、片花关联长视频 7、脏话检测 内容仓的办公区挂着几台电视&#xff0c;显示每个人目前完成的工作量&#xff0c;这就是绩效看板&#xff08;如下图&#xff09;&#xff0c;每位来参观的领导&#xff0c;都觉得这个绩效看板的想法很有意思。绩效看板是制造业常用的管理方法&…

【数据结构初阶】六、线性表中的队列(链式结构实现队列)

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【数据结构初阶】五、线性表中的栈&#xff08;顺序表实现栈&#xff09;_高高的胖子的博客-CSDN博客 1 . 队列&#xff08;Queue&#xff09; 队列的概念和结构&#xff1a; 队列…

基于Java的食堂管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统功能具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域…

【设计模式】备忘录模式

文章目录 1.备忘录模式定义2.备忘录模式的角色3.备忘录模式实现3.1.场景说明3.2.结构类图3.3.代码实现 4.备忘录模式优缺点5.备忘录模式适用场景6.备忘录模式总结 主页传送门&#xff1a;&#x1f481; 传送 1.备忘录模式定义 备忘录&#xff08;Memento Pattern&#xff09;模…

图像处理: 马赛克艺术

马赛克 第一章 马赛克的历史渊源 1.1 马赛克 艺术中的一种表面装饰&#xff0c;由紧密排列的、通常颜色各异的小块材料&#xff08;如石头、矿物、玻璃、瓷砖或贝壳&#xff09;组成。与镶嵌不同的是&#xff0c;镶嵌是将要应用的部件放置在已挖空以容纳设计的表面中&#xff0…

ubuntu20安装nvidia驱动

1. 查看显卡型号 lspci | grep -i nvidia 我的输出&#xff1a; 01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080] (rev a1) 01:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1) 07:00.0 VGA comp…

国庆周《Linux学习第三课》

国庆周《Linux学习第三课》 国庆周《Linux学习第二课》_IHOPEDREAM的博客-CSDN博客 总结 用户的管理 增加一个用户 删除一个用户 修改一个用户 查看一个用户 用户组的管理 增加一个组 删除一个组 修改一个组 查看一个组 将用户成员增加到该组中去 移除组的成员 1 用户

怎样在CSDN插入代码块 怎么变色?

添加代码块&#xff0c;通常有三种方式&#xff1a; 文章目录 ①点击 工具栏中的代码块 代码块 </>&#xff0c;② 快捷键 ctrlshiftk③ 先粘贴上代码&#xff0c;在选中 ctrlshiftk4 如果代码没有变彩色 ①点击 工具栏中的代码块 代码块 </>&#xff0c; 例如 选…

UWB技术在汽车智能制造的应用

返修区车辆管理项目 应用背景 在车辆总装生产线中&#xff0c;车辆下线后检测与返修是最后一个关键环节&#xff0c;整车一旦下线&#xff0c;由于流水线装配工艺、来料等原因&#xff0c;可能会出现部分整车存在瑕疵&#xff0c;进而进入返修区域待检。由于可能出现问题的不确…

探索设计模式:从组合到享元的软件架构之旅 (软件设计师笔记)

&#x1f600;前言 设计模式是软件开发中常见和经常使用的一种最佳实践方式&#xff0c;它们是为了解决在软件设计中反复出现的一类问题而提出的通用解决方案。本文主要探讨了四种设计模式&#xff1a;Composite&#xff08;组合&#xff09;、Decorator&#xff08;装饰器&…

Passper for Excel v3.7.3.4 Excel 密码恢复工具

网盘下载 Passper for Excel 是 Windows 上一款 Excel 密码恢复工具。可以恢复任何丢失或忘记的 Excel 文档密码。具有高恢复率和 100% 的数据安全性。支持通过 GPU 加速恢复密码&#xff0c;恢复速度提高 10 倍以上。 字典&#xff0c;根据内置或自定义词典恢复密码。 一般来…

【接口测试】测试基础

一、接口测试简介 1.接口测试的定义 接口测试是一种测试系统组件间接口的测试&#xff0c;主要目标是检测外部系统与系统之间以及内部各个子系统之间的交互点&#xff0c;以检查数据的交换、传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 随着前后端分离…

Visio如何对文本打下标、上标,以及插入公式编辑器等问题(已解决)

解决这个问题的本质问题&#xff0c;就是在Visio中插入公式编辑器&#xff08;这不是visio的常用命令&#xff0c;需要添加&#xff09;。 打开Visio--》文件--选项 点击选项&#xff0c;弹出对话框。在自定义功能区中&#xff0c;点击 常用命令&#xff0c;在下拉选项中&#…

【Ambari】银河麒麟V10 ARM64架构_安装Ambari2.7.6HDP3.3.1问题总结

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1f338;文…

IDEA Debug技巧大全,看完就能提升工作效率

作者简介 目录 1.行断点 2.方法断点 3.异常断点 4.字段断点 5.条件表达式 1.行断点 行断点就是平时我们在代码行旁边单击鼠标打上的断点&#xff0c;这个没有什么好说的。关键点在于很多人不知道的&#xff0c;行断点其实是可以右击选择是对改行的全部调用都生效&#xf…