AtCoder Beginner Contest 347 A - E

news2024/11/26 16:42:38

A - Divisible

大意

给定n个数,对于其中能被$k$整除的数,输出商。

思路

直接计算即可。

代码

#include<iostream>
using namespace std;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int n, k;
    cin >> n >> k;
    while(n--){
        int x;
        cin >> x;
        if(x % k == 0) cout << (x / k) << " ";
    }
    return 0;
}

B - Substring

大意

给定字符串S,输出它不同的子串个数(不包括空串)。

思路

把所有子串丢进集合里,最后输出集合的大小。

代码

#include<iostream>
#include<set>
using namespace std;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);

    int n;
    string s;
    set<string> subs;
    cin >> s;
    n = s.size();

    for(int i = 0; i < n; i++)
        for(int j = i; j < n; j++)
            subs.insert(s.substr(i, j - i + 1));
    
    cout << subs.size() << endl;

    return 0;
}

C - Ideal Holidays

大意

一种历法,一周有a+b天,前a天是节假日,其余为工作日。

给定一些计划,输出它们是否都安排在节假日。

思路

最重要的是星期几,因此所有D_i模上a+b

问题被转化为:数轴上有一些点,问能否有一个长度为a的区间覆盖所有点。

先排序,然后枚举左端点,看与最右边的点的距离是否超过 a即可。

注意会爆long long。

代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
#define int long long
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int n, a, b;
    cin >> n >> a >> b;
    int tot = a + b;
    vector<int> dis;
    for(int i = 0; i < n; i++){
        int x; cin >> x; x--;
        x %= tot;
        dis.push_back(x);
        dis.push_back(tot + x);
    }
    sort(dis.begin(), dis.end());
    int ans = 1e18;
    for(int i = 0; i < n; i++)
        ans = min(ans, dis[i + n - 1] - dis[i] + 1);
    cout << (ans <= a? "Yes": "No") << endl;
    return 0;
}

D - Popcount and XOR

大意

给定a,b,c,解下列方程组,要求0 \le x,y \le 2^{60},若无解输出-1:
\begin{cases} \operatorname{popcount}(x)=a\\ \operatorname{popcount}(y)=b\\ x\oplus y=c\\ \end{cases}

给定任意一组解均可。

思路

cnt=\operatorname{popcount}(c),那么这cnt个1需要分配到x,y中。

设分配了p个1给xq个1给y,并且p+q=cnt

那么剩下的1需要在xor抵消掉。

易得a-p=b-q,结合p+q=cnt可解得p,q

具体解法为:

v=\dfrac{a+b-cnt}{2} \\ p=a-v \\ q=b-v

其中v就是需要抵消掉的1的数量。

我们逐位遍历c,如果是1,则分配给xy(看p,q的值),如果是0,就同时分配给两个数。

无解条件就是上面的方程没有自然数解,即下面几种情况:

  • a+b < c
  • (a+b-cnt) \mod 2 = 1
  • p<0q<0
  • 还有一种难以言说的情况,需要求出答案后验证一下。

代码

#include<iostream>
#include<cassert>
using namespace std;
#define int long long
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);

    auto popcount = [&](int x) -> int{
        int ret = 0;
        while (x) {
            ret += x & 1;
            x >>= 1;
        }
        return ret;
    };

    int a, b, c;
    cin >> a >> b >> c;

    int aa = a, bb = b, cc = popcount(c);
    if(cc > a + b || ((a + b - cc) & 1)){
        cout << -1 << endl;
        return 0;
    }
    int over = (a + b - cc) / 2;
    a -= over;
    b -= over;
    if(a < 0 || b < 0){
        cout << -1 << endl;
        return 0;
    }

    int x = 0, y = 0;
    for(int i = 0; i < 60; i++){
        if(c & (1ll << i)){
            if(a){
                x |= (1ll << i);
                a--;
            } else if(b){
                y |= (1ll << i);
                b--;
            }
        }else if(over){
            x |= (1ll << i);
            y |= (1ll << i);
            over--;
        }else assert(0);
    }
    if(popcount(x) != aa || popcount(y) != bb) cout << -1 << endl;
    else cout << x << " " << y << endl;

    return 0;
}

E - Set Add Query

大意

初始时,有一个包含n0的数组A和一个空集S

q次操作,每次操作给定一个x,执行以下动作:

  • 如果x在集合中,那就移除它,否则丢入集合。
  • 对于每个满足1\le i\le ni,如果i \in S,那么a_i加上集合的大小。

执行所有操作后,输出A

思路

朴素的模拟的复杂度是O(nq),显然不可取。

考虑在这个过程,当一个数x在集合中时,它在被移出集合之前,都会对A做贡献。

注意到一个数 x做出的贡献是一个连续的操作区间,贡献值就是这个操作区间的|S|的和。

我们可以维护一个关于操作顺序的|S|的前缀和,当集合中的一个数被移除时,我们就计算它的贡献(前缀和相减)。需要记录x何时放入。

操作完后,对还在集合里的数结算贡献即可。

代码

#include<iostream>
#include<set>
#include<vector>
using namespace std;
#define int long long
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int n, q;
    cin >> n >> q;
    vector<int> pre(1, 0), la(n, 0), ans(n, 0);
    set<int> s;
    for(int i = 1; i <= q; i++){
        int x; cin >> x; x--;
        if(s.count(x)){
            ans[x] += pre[i - 1] - pre[la[x] - 1];
            s.erase(x);
        }else{
            la[x] = i;
            s.insert(x);
        }
        pre.push_back(pre.back() + s.size());
    }
    for(auto &i: s) ans[i] += pre[q] - pre[la[i] - 1];
    for(auto &i: ans) cout << i << " ";
    return 0;
}

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

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

相关文章

IDEA 详细设置

详细设置 如何打开详细配置界面 1、显示工具栏 2、选择详细配置菜单或按钮 系统设置 默认启动项目配置 启动IDEA时&#xff0c;默认自动打开上次开发的项目&#xff1f;还是自己选择&#xff1f; 如果去掉Reopen projects on startup前面的对勾&#xff0c;每次启动IDEA就会…

OSCP靶场--Access

OSCP靶场–Access 考点( 文件上传[黑名单apache.htaccess绕过] Kerberoasting SeManageVolume滥用提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.216.187 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-3…

【图轮】【 最小生成树】【 并集查找】1489. 找到最小生成树里的关键边和伪关键边

本文涉及知识点 图轮 最小生成树 并集查找 关键边 1489. 找到最小生成树里的关键边和伪关键边 给你一个 n 个点的带权无向连通图&#xff0c;节点编号为 0 到 n-1 &#xff0c;同时还有一个数组 edges &#xff0c;其中 edges[i] [fromi, toi, weighti] 表示在 fromi 和 to…

【Leetcode】2580. 统计将重叠区间合并成组的方案数

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个二维整数数组 ranges &#xff0c;其中 ranges[i] [starti, endi] 表示 starti 到 endi 之间&#xff08;包括二者&#xff09;的所有整数都包含在第 i 个区间中。 你需要…

loadbalancer 引入与使用

在消费中pom中引入 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> 请求调用加 LoadBalanced 注解 进行服务调用 默认负载均衡是轮训模式 想要切换…

基于Java+SpringBoot+vue仓库管理系统设计与实现

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

转移指令的原理

文章目录 转移指令的原理1. 操作符offset2. jmp指令3. 依据位移进行转移的jmp指令4. 转移的目的地址在指令中的jmp指令5. 转移地址在寄存器中的jmp指令6. 转移地址在内存中的jmp指令7. jcxz指令8. loop指令9. 根据位移进行转移的意义10. 编译器对转移位移超界的检测 转移指令的…

六种典型的商业间谍软件实例分析

近年来&#xff0c;随着数字化经济的快速发展&#xff0c;这也推动了商业间谍软件数量的急剧增长。目前&#xff0c;商业间谍软件的主要类型包括以下六种。 商业间谍软件是一种软件应用程序/脚本&#xff0c;也被称为“跟踪软件”、“监视软件”&#xff0c;主要功能包括非法数…

Kerberos 认证 javax.security.auth.logon.LoginException:拒绝链接 (Connection refused)

kerberos 服务重启之后异常 项目中用到了hive 和hdfs &#xff0c;权限认证使用了Kerberos&#xff0c;因为机房异常&#xff0c;导致了Kerberos 服务重启&#xff0c;结果发现本来运行正常的应用服务hive 和hdfs 认证失败&#xff0c;报错信息是 典型的网络连接异常 排查思路…

【C语言终章】预处理详解(下)

【C语言终章】预处理详解&#xff08;下&#xff09; 当你看到了这里时&#xff0c;首先要恭喜你&#xff01;因为这里就是C语言的最后一站了&#xff0c;你的编程大能旅途也将从此站开始&#xff0c;为坚持不懈的你鼓个掌吧&#xff01; &#x1f955;个人主页&#xff1a;开敲…

2023年蓝桥杯省赛——蜗牛

目录 题目链接&#xff1a;1.蜗牛 - 蓝桥云课 (lanqiao.cn) 思路 暴力贪心 代码实不了现 动态规划 代码实现 难点解释 总结 题目链接&#xff1a;1.蜗牛 - 蓝桥云课 (lanqiao.cn) 思路 暴力贪心 蓝桥杯反正是能暴力出来一个用例是一个&#xff0c;我真的被折磨了好久&…

10.python的字典dict(上)

10.python的字典dict(上) 什么是字典 在计算机科学中&#xff0c;字典是一种数据结构&#xff0c;用于存储键值对&#xff08;key-value pair&#xff09;的集合。每个键值对都由一个唯一的键和一个对应的值组成。字典能够快速地根据键找到对应的值&#xff0c;因此在很多编程…

探索----------------阿里云

目录 一、阿里云四大件 1、云服务器ECS 2、云数据库RDS 3、负载均衡SLB 4、对象存储OSS 5、其他的云计算产品 1&#xff09;内容分发网络CDN 2&#xff09;专有网络 VPC 二、linux发行版本 三、你平时对系统会怎么优化&#xff08;五大负载&#xff09; 1、cpu 使用率…

有什么好用的网页在线客服系统?选择指南与实用推荐

有什么好用的网页在线客服系统&#xff1f; 企业与客户之间的互动变得越来越重要。为了提高客户满意度和提升企业形象&#xff0c;许多企业开始使用网页在线客服系统。网页在线客服系统是一种实时的、便捷的沟通工具&#xff0c;可以帮助企业与客户建立更紧密的联系。 一、网…

黑马点评项目笔记 II

基于Stream的消息队列 stream是一种数据类型&#xff0c;可以实现一个功能非常完善的消息队列 key&#xff1a;队列名称 nomkstream&#xff1a;如果队列不存在是否自动创建&#xff0c;默认创建 maxlen/minid&#xff1a;设置消息队列的最大消息数量 *|ID 唯一id&#xff1a;…

C++刷题篇——07检测热点字符

一、题目 二、解题思路 1、使用map&#xff0c;key为元素&#xff0c;value为出现的次数 2、由于sort不适用于map&#xff0c;因此要将map的key、value放到vector中&#xff0c;再对vector排序 3、对map排序&#xff1a;方法1&#xff1a;使用二维数组vector<vector<>…

蓝桥杯习题

https://www.lanqiao.cn/problems/1265/learning/ 第一题---排序 给定一个长度为N的数组A&#xff0c;请你先从小到大输出它的每个元素&#xff0c;再从大到小输出他的每个元素。 输入描述&#xff1a; 第一行包含一个整数N 第二行包含N个整数a1,a2,a3,...an&#xff0c;表…

解决多模块项目报错,找不到程序包

本周&#xff0c;我遇到了一个常见的错误——“找不到程序包”。这个错误是由于模块间的依赖关系没有正确配置导致的。经过一系列的尝试和排查&#xff0c;我最终找到了解决问题的方法。下面&#xff0c;我将详细记录这次问题的处理过程&#xff0c;并总结其中的经验教训。 问…

C/C++ 之 GSL 数学运算库使用笔记

Part.I Introduction 本文主要记录一下笔者使用 GSL 过程当中所做的一些笔记。 Chap.I 传送门 一些传送门 GSL源码&#xff08;CMakeList 版本-Windows&#xff09;GSL源码&#xff08;configure 版本-Linux&#xff09;GSL 在线文档GSL 文档下载 Chap.II GSL 简介 GSL 全…

使用通用内部函数对代码进行矢量化

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV 如何使用 XML 和 YAML 文件的文件输入和输出 下一篇&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; ​ 目标 本教程的目标是提供使用通用内…