Codeforces Round 976 (Div. 2) (部分题解)

先做一个提前的小结,感觉这场每题有很特别的结论或者很难去guess的点,但就是能对,可能在证明上有点复杂吧。 

A. Find Minimum Operations

思路:题意的话就是用(n-k^{x})来代替n的最小操作步骤,

这里其实可以转换成求将n改写成k进制下的各位上的数的和

AC代码:

#include <bits/stdc++.h>
using namespace std;
 
int find_min_oper(int n, int k){
	if(k == 1) return n;
	int ans = 0;
	while(n){
		ans += n%k;
		n /= k;
	}
	return ans;
}
 
int main()
{
	int t;
	cin >> t;
	while(t--){
		int n,k;
		cin >> n >> k;
		cout << find_min_oper(n,k) << "\n";
	}
    return 0;
}

B. Brightness Begins

思路:这道题不好看出规律来,应该用打表来好观察一点,接下来是我的打表代码(可以参考一下):

void solve(){
	vector<int> s(21,0);
	for (int i = 2; i<=20; i++){
		for (int j = 1;j<=20; j++){
			if (j%i == 0) s[j] = 1-s[j];
			if (j <= i) cout << s[j] << " \n"[j==i];
		}
	}
}

这样我们就能观察出规律,只要是平方数就为0,其余为1,所以我们可以使用二分来求解答案 

AC代码:

#include <bits/stdc++.h>
using namespace std;
int main(){
    int t;
    cin >> t;
    while(t--){
        long long k, l = 1, r = 2e18;
        cin >> k;
        while(l+1 < r){
            long long mid = (l+r)>>1;
            long long n = mid - int(sqrtl(mid));
            if(n >= k) r = mid;
            else l = mid;
        }
        cout << r << "\n";
    }
    return 0;
}

而官方题解给出了一个公式,能直接求出结果

n=\left \lfloor k+\sqrt{k}+0.5 \right \rfloor 

感兴趣的可以去证一下。

C. Bitwise Balancing

 思路:首先对于每一位我们都能得出a,b,c,d的关系,先将其列出来

会发现对于b,c,d的组合为011,100是不会出现的,当遇到了就返回输出-1,接下来观看a必须输出为1的b,c,d的组合为110,001,所以当遇到这样组合时a就加上该进制位,其余组合可以为0,不用管,并且这里注意最后求出a还要判断判断一下。

AC代码:

void solve()
{
    int b, c, d;
    cin >> b >> c >> d;
    int mask = 1, bit_b, bit_c, bit_d;
    int a = 0, flag = 0;
    for (int i = 0; i<62; i++){
        bit_b = (b & mask ? 1 : 0);
        bit_c = (c & mask ? 1 : 0);
        bit_d = (d & mask ? 1 : 0);
        if ((!bit_b && bit_c && bit_d) || (bit_b && !bit_c && !bit_d)){
            cout << -1 << endl;
            return ;
        }
        else if ((!bit_b && !bit_c && bit_d) || (bit_b && bit_c && !bit_d)){
            a += (1ll<<i);
        }
        mask <<= 1;
    }
    if ((a|b)-(a&c)!=d){
        cout << -1 << endl;
    }
    else cout << a << endl;
}

心得:之前也是想着枚举每一位二进制来做,但考虑的是(a|b)与(a&c)这样之类的来考虑,想到这一块如果是0,1的话不得相减向前借一位,很难考虑,后来发现这样的情况根本不会存在,因为这一位(a|b)的a、b都为0,那么后面的(a&c)也肯定为0.

这里还有个结论直接就能给出结果,具体见如下代码:

void solve()
{
    int b, c, d;
    cin >> b >> c >> d;
    int a = b^d;
    if ((a|b)-(a&c)!=d) cout << -1 << endl;
    else cout << a << endl;
}

D. Connect the Dots

思路:因为这道题的d的取值很小,所以我们可以存储d的差分来实现连接存贮,这样对于一个点总是往后连接就行了,再用并查集来找联通块

struct ufSet{
    vector<int> fa,siz;
    // fa[N]用于存储每个元素的父节点信息
    // siz[N]用于存储每个集合的大小
    void init(int n){
        fa.resize(n+5),siz.resize(n+5);
        for(int i=1;i<=n;i++) fa[i]=i,siz[i]=1;
    }
    int find(int x){
        if(x==fa[x]) return x;
        fa[x]=find(fa[x]);
        return fa[x];
    }
    bool mrg(int x,int y){
        x=find(x),y=find(y);
        if(x==y) return 0;
        if(siz[x]<siz[y]) swap(x,y);
        fa[y]=x,siz[x]+=siz[y];
        return 1;
    }
}t;
void solve()
{
    
    int n, m;
    cin >> n >> m;
    t.init(n);
    vector<vector<int>> s(n+1, vector<int>(M, 0));
    for (int i = 1; i<=m; i++){
        int a, d, k;
        cin >> a >> d >> k;
        if (a+d <= n){
            s[a+d][d]++;
        }
        if (a+k*d+d <= n){
            s[a+k*d+d][d]--;
        }
    }
    for (int i = 1; i<=n; i++){
        for (int j=0; j<M; j++){
            if (i-j >= 1){
                s[i][j] += s[i-j][j];
                if (s[i][j] && i-j >= 1){
                    t.mrg(i, i-j);
                }
            }
        }
    }
    set<int> st;
    for (int i = 1; i<=n; i++) st.insert(t.find(i));
    cout << st.size() << endl;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DMR协议空中接口部分

文章目录 前言DMR 空中接口协议栈模型无线空中接口发送与接收参考模型DMR的TDMA结构帧结构突发结构数据与控制突发语音突发公共广播信道突发 数据信息传送时序语音信息传送时序帧同步 调制解调4-CPFSK正交调制4-CPFSK解调基带成型滤波 信道编码类型参考 前言 DMR 协议的标准号主…

专题二串联所有单词的子串

1.题目 题目分析&#xff1a; 有一个字符串s和字符串数组&#xff0c;如何字符串数组里面的元素可以组成一个字符串&#xff0c;然后要在字符串里面找到连续子串跟组成的字符串一样&#xff0c;返回起始地址。 2.算法原理 这道题可以把字符串数组的元素string看出char&#x…

uniapp或者vue 使用serialport

参考https://blog.csdn.net/ykee126/article/details/90440499 版本是第一位&#xff1a;否则容易编译失败 node 版本 18.14.0 npm 版本 9.3.1 electron 版本 30.0.8 electron-rebuild 版本 3.2.9 serialport 版本 10.0.0 需要python环境 main.js // Modules to control app…

编程题-计算器(中等)

题目&#xff1a; 给定一个包含正整数、加()、减(-)、乘(*)、除(/)的算数表达式(括号除外)&#xff0c;计算其结果。 表达式仅包含非负整数&#xff0c;&#xff0c; - &#xff0c;*&#xff0c;/ 四种运算符和空格 。 整数除法仅保留整数部分。 解法一&#xff08;栈&…

数据增强术:如何利用大模型(LLMs)来模拟不同的扰动类型以增强信息提取任务的鲁棒性

一、对抗样本库构建 1. 基于LLMs的领域针对性扰动设计对抗样本生成 替换实体、三元组和触发器&#xff08;Replace Entity, Triple, and Trigger&#xff09; 使用LLMs&#xff08;如GPT-4&#xff09;来替换句子中的实体、关系三元组或事件触发器&#xff0c;同时保持其类型不…

深入了解Linux —— git三板斧

版本控制器git 为了我们方便管理不同版本的文件&#xff0c;就有了版本控制器&#xff1b; 所谓的版本控制器&#xff0c;就是能够了解到一个文件的历史记录&#xff08;修改记录&#xff09;&#xff1b;简单来说就是记录每一次的改动和版本迭代的一个管理系统&#xff0c;同…

Windows编程----进程的当前目录

进程的当前目录 Windows Api中有大量的函数在调用的时候&#xff0c;需要传递路径。比如创建文件&#xff0c;创建目录&#xff0c;删除目录&#xff0c;删除文件等等。拿创建文件的CreateFile函数做比喻&#xff0c;如果我们要创建的文件路径不是全路径&#xff0c;那么wind…

MyBatis-Plus分页控件使用及使用过程发现的一个坑

最近维护一个旧项目的时候&#xff0c;出现了一个BUG&#xff0c;经排查后发现是Mybatis-plus分页控件使用的时候需要注意的一个问题&#xff0c;故在本地使用MybatisPlus模拟出现了一下这个问题。 首先&#xff0c;先说一下MyBatis-Plus的使用&#xff1a; 1&#xff09;引入…

服务端和客户端通信(TCP)

服务端 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks;namespace TeachTcpServer {class Program{static void Main(string[] args){#region 知识点一 …

Windows下配置Flutter移动开发环境以及AndroidStudio安装和模拟机配置

截止 2025/3/9 &#xff0c;版本更新到了 3.29.1 &#xff0c;但是为了防止出现一些奇怪的bug&#xff0c;我安装的还是老一点的&#xff0c;3.19&#xff0c;其他版本的安装同理。AndroidStudio用的是 2024/3/1 版本。 — 1 环境变量&#xff08;Windows&#xff09; PUB_H…

C++11中的Condition_variable

C11中的condition_variable 在C11中&#xff0c;条件变量&#xff08;std::condition_variable&#xff09;是线程同步机制之一&#xff0c;用于在多线程环境中实现线程间的通信和协调。它允许一个或多个线程在某个条件尚未满足时等待&#xff0c;直到其他线程通知条件已经满足…

ROS2-话题学习

强烈推荐教程&#xff1a; 《ROS 2机器人开发从入门到实践》3.2.2订阅小说并合成语音_哔哩哔哩_bilibili 构建功能包 # create package demo_python_pkg ros2 pkg create --build-type ament_python --license Apache-2.0 demo_python_pkg 自己写的代码放在./demo_python_pkg/…

深度学习模型Transformer核心组件—前馈网络FFN

第一章&#xff1a;人工智能之不同数据类型及其特点梳理 第二章&#xff1a;自然语言处理(NLP)&#xff1a;文本向量化从文字到数字的原理 第三章&#xff1a;循环神经网络RNN&#xff1a;理解 RNN的工作机制与应用场景(附代码) 第四章&#xff1a;循环神经网络RNN、LSTM以及GR…

Helm安装chart包到k8s报错“不能重复使用名称,名称已被使用”

一、报错提示如下 “Error: INSTALLATION FAILED: cannot re-use a name that is still in use”,意思是安装chart时提供的名称已存在&#xff0c;不能重复使用同一个名称。 登录后复制 rootiZ:/usr/local/src/my-helm-repo/charts# helm install mymemcached3 memcached -n te…

容器编排革命:从 Docker Run 到 Docker Compose 的进化之路20250309

容器编排革命&#xff1a;从 Docker Run 到 Docker Compose 的进化之路 一、容器化部署的范式转变 在 Docker 生态系统的演进中&#xff0c;容器编排正从“手动操作”走向“自动化管理”。根据 Docker 官方 2023 年开发者调查报告&#xff0c;78% 的开发者已采用 Docker Compo…

对开源VLA sota π0的微调——如何基于各种开源数据集、以及你自己的私有数据集微调π0(含我司的微调实践)

前言 25年2.4日&#xff0c;几个月前推出π0的公司Physical Intelligence (π)宣布正式开源π0及π0-FAST&#xff0c;如之前所介绍的&#xff0c;他们对用超过 10,000 小时的机器人数据进行了预训练 该GitHub代码仓库「 π0及π0-FAST的GitHub地址&#xff1a;github.com/Ph…

VBA使用fso对象合并指定路径的txt文件(含子目录)

图(1) 前几天我跟大家分享了在VBA中如何获取指定类型文件的路径的方法&#xff0c;其中最重要的一个思路就是在处理完当前目录的文件后&#xff0c;再调用程序自身来对子目录进行处理&#xff0c;以此来实现对子目录的无限循环&#xff0c;直至所有文件都处理完毕为止。按照此设…

nginx反向代理功能

如上图所示&#xff0c;当配置好nginx反向代理服务器的时候&#xff0c;客户端向nginx反向代理服务器发送请求&#xff0c;nginx反向代理服务器再向真实服务器转发请求。 nginx作为反向代理就是利用nginx高并发&#xff0c;速度快的特性&#xff0c;让nginx能够承受更多的链接…

deepseek在pycharm中的配置和简单应用

对于最常用的调试python脚本开发环境pycharm&#xff0c;如何接入deepseek是我们窥探ai代码编写的第一步&#xff0c;熟悉起来总没坏处。 1、官网安装pycharm社区版&#xff08;免费&#xff09;&#xff0c;如果需要安装专业版&#xff0c;需要另外找破解码。 2、安装Ollama…

【江协科技STM32】ADC数模转换器-学习笔记

ADC简介 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁&#xff0c;ADC是一种将连续的模拟信号转换为离散的数字信号的设备或模块12位逐次逼近型…