codeforces round976 div2

news2024/11/25 21:52:25

A find minimum operations

思路:将所给的n变成k进制数,答案就是n的k进制形式下的位数之和

代码:
 

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

ll n, k;

void solve() {
    cin >> n >> k;
    ll cnt = 0;
    if(k == 1) cout << n << "\n";
    else {
    while(n) {
        cnt += n % k;
        n /= k;
    }
    cout << cnt << "\n";}
}

int main() {
    int t;
    cin >> t;
    while(t -- ) solve();
    return 0;
}

B brightness begins

问题:

思路:
不难得到结论,只有当一个数的约数个数为偶数时,才可以保证灯处于on状态

模拟一组数据后发现,只有当该数为平方数时,约数个数才为偶数个

现在对于此结论给出证明:
将数x分解质因数可以得到以下形式:

x = {a_1}^{b1}{a_2}^{b2}{a_3}^{b3}...{a_n}^{bn}

由加法原理,乘法原理(其实就是排列组合)可知,x的约数个数与b有关

即约数个数n = ({b_1} + 1) ({b_2} + 1)({b_3} + 1)...({b_n} + 1)

不难发现,只有当b全部为偶数时,n才为偶数,因为在乘法中只要有一个乘数为偶数,结果就是偶数

现在得到结论,b均为偶数

那么有x = ({​{a_1}^{\frac{​{b_1}}{2}}{a_2}^{\frac{​{b_2}}{2}}{a_3}^{\frac{b_3}{2}}...{a_n}^{\frac{​{b_n}}{2}}})^2

即可证明x为平方数

并且数n以内的平方数有\sqrt{n}个,因此就可以用二分求解答案

代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

void solve() {
    ll k;
    cin >> k;

    auto find = [&](ll x) {
        ll l = 0, r = 1e9;
        while(l < r) {
            ll mid = l + r + 1 >> 1;
            if(mid * mid <= x) l = mid;
            else r = mid - 1;
        }
        return l;
    };
    //cout << find(3) << " ";
    ll l = 0, r = 2e18;
    while(l < r) {
        ll mid = l + r >> 1;
        if(mid - find(mid) >= k) r = mid;
        else l = mid + 1;
    }
    cout << l << "\n";
}

int main() {
    int t;
    cin >> t;
    while(t -- ) solve();
    return 0;
}

C bitwise balenced

问题:

思路:首先观察式子,是否存在进位借位关系

注意到a | b >= a   a & c <= a因此不存在借位关系,又因为是减法运算,所以也不会存在进位关系,那么这道题就是位独立的一道题,直接拆位讨论即可

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;

void solve() {
    ll b, c, d;
    ull a = 0;
    cin >> b >> c >> d;
    for(int i = 0; i <= 60; i ++ ) {
        int u = d >> i & 1;
        if(u == 1) {
            if((b >> i & 1) == 1 && (c >> i & 1) == 1) {
                a += 0;
            } else if((b >> i & 1) == 1 && (c >> i & 1) == 0) {
                a += 0;
            } else if((b >> i & 1) == 0 && (c >> i & 1) == 1) {
                cout << "-1\n";
                return;
            } else if((b >> i & 1) == 0 && (c >> i & 1) == 0) {
                a += ((ull)1 << i);
            }
        } else {
            if((b >> i & 1) == 1 && (c >> i & 1) == 1) {
                a += ((ull)1 << i);
            } else if((b >> i & 1) == 1 && (c >> i & 1) == 0) {
                cout << "-1\n";
                return;
            } else if((b >> i & 1) == 0 && (c >> i & 1) == 1) {
                a += 0;
            } else if((b >> i & 1) == 0 && (c >> i & 1) == 0) {
                a += 0;
            }
        }
    }
    cout << a << "\n";
}

int main() {
    int t;
    cin >> t;
    while(t -- ) solve();
    return 0;
}

D connected dots

问题:

思路:首先注意到是联通块问题,因此可以考虑图论,并查集之类的做法,这里是并查集。

如果一个一个枚举判断是否在一个集合中,最差情况下要比较n^2次,显然超时,这时候注意到我们的d很小,公差很小,就意味着每一个点最多与前面的d个点联通。我们可以用差分对一段线段打上标记,并强制点向前连边,那么我们就可以在d * n的时间复杂度内完成并查集的合并

代码:
 

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N = 2e5 + 10;

int p[N], _size[N];

void init(int n) {
    for(int i = 1; i <= n; i ++ ) {
        p[i] = i;
        _size[i] = 1;
    }
}

int find(int x) {
    if(x != p[x]) {
        p[x] = find(p[x]);
    }
    return p[x];
}

void merge(int a, int b) {
    int pa = find(a), pb = find(b);
    if(pa == pb) return;
    if(_size[pa] < _size[pb]) swap(pa, pb);
    _size[pa] += _size[pb];
    p[pb] = pa;
}

void solve() {
    int n, m;
    cin >> n >> m;
    init(n);
    vector<vector<int>> diff((n + 11), vector<int>(11));
    while(m -- ) {
        int a, d, k;
        cin >> a >> d >> k;
        diff[a + d][d] ++;
        diff[a + d * k + d][d] --; 
    }

    for(int i = 1; i <= 10; i ++ ) {
        for(int j = 1; j <= n; j ++ ) {
            diff[j][i] += diff[max(0, j - i)][i];
        }
    }
    
    for(int i = 1; i <= n; i ++ ) {
        for(int j = 1; j <= 10; j ++ ) {
            if(i - j >= 1) {
                if(diff[i][j]) {
                    merge(i, i - j);
                }
            }
        }
    }
    
    set<int> se;
    for(int i = 1; i <= n; i ++ ) se.insert(find(i));
    cout << se.size() << "\n";
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    int t;
    cin >> t;
    while(t -- ) solve();
    return 0;
}

E expected power

思路:注意到值域最大是1023,并且恰好二进制表示时各个位数都为1,由异或性质得知,最后S的值域也是不大于1023,可以枚举值域,然后用dp计算概率

时间复杂度1e8理论可以过,但是这里tle thinking....

代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll mod = 1e9 + 7;

ll qmi(ll a, ll b) {
    ll res = 1;
    while(b) {
        if(b & 1) (res *= a) %= mod;
        (a *= a) %= mod;
        b >>= 1;
    }
    return res;
}

void solve() {
    ll n;
    cin >> n;
    vector<ll> a(n + 1), p(n + 1);
    for(int i = 1; i <= n; i ++ ) cin >> a[i];
    for(int i = 1; i <= n; i ++ ) {
        cin >> p[i];
        p[i] = (p[i] * qmi(10000ll, mod - 2)) % mod;
    }

    vector<vector<ll>> dp((n + 1), vector<ll>(1025));
    dp[0][0] = 1;
    for(int i = 1; i <= n; i ++ ) {
        for(ll val = 0; val <= 1023; val ++ ) {
            (dp[i][val ^ a[i]] += dp[i - 1][val] * p[i]) %= mod;
            (dp[i][val] += dp[i - 1][val] * (mod + 1 - p[i])) %= mod;       
        }
    }

    ll ans = 0;
    for(int i = 0; i <= 1023; i ++ ) {
        (ans += dp[n][i] * i * i) %= mod;
    }
    cout << ans << "\n";
}

int main() {
    ios::sync_with_stdio(false);
    cout.tie(0),  cin.tie(0);
    int t;
    cin >> t;
    while(t -- ) solve();
    return 0;
}


 

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

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

相关文章

详解Spotbugs-maven-plugin(报告如何生成html测试报告)

Spotbugs介绍 SpotBugs是Findbugs的继任者&#xff08;Findbugs已经不再维护&#xff09;&#xff0c;用于对Java代码进行静态分析&#xff0c;查找相关的漏洞&#xff0c;SpotBugs比Findbugs拥有更多的校验规则。静态分析会检查Java字节码&#xff08;.class文件&#xff09;…

专题十一_递归_回溯_剪枝_综合练习_算法专题详细总结

目录 1. 找出所有⼦集的异或总和再求和&#xff08;easy&#xff09; 解析&#xff1a; 方法一&#xff1a; 解法二&#xff1a; 总结&#xff1a; 2. 全排列 Ⅱ&#xff08;medium&#xff09; 解析&#xff1a; 解法一&#xff1a;只关心“不合法”的分支 解法二&…

AI比诺奖得主更聪明。。。

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 AI圈又发生了哪些新鲜事&#xff1f; 特斯拉Optimus人形机器人亮相&#xff1a;日常任务好帮手 特斯拉在Cybercab活动上展示了其新款人形机器人Optimus&#xff0c;这款机器人能够执行拿包裹、浇水等…

CentOS快速配置网络Docker快速部署

CentOS快速配置网络&&Docker快速部署 CentOS裸机Docker部署1.联通外网2.配置CentOS镜像源3.安装Docker4.启动Docker5.CentOS7安装DockerCompose Bug合集ERROR [internal] load metadata for docker.io/library/java:8-alpineError: Could not find or load main class …

20241013组会

文章&#xff1a;A learnable end-edge-cloud cooperative network for driving emotion sensing 引言&#xff1a; 驾驶员的情绪状态直接影响安全驾驶。在“车-人-路-云”一体化控制框架下&#xff0c;我们提出了一种端-边-云协同情感感知网络模型&#xff08;EEC-Net&#x…

Android平台RTSP|RTMP播放器PK:VLC for Android还是SmartPlayer?

好多开发者&#xff0c;希望在Android端低延迟的播放RTMP或RTSP流&#xff0c;本文就目前市面上主流2个直播播放框架&#xff0c;做个简单的对比。 VLC for Android VLC for Android 是一款功能强大的多媒体播放器&#xff0c;具有以下特点和功能&#xff1a; 广泛的格式支持…

FPAG学习(5)-三种方法实现LED流水灯

目录 1.移位实现LED流水灯 1.1创建工程及源文件代码 1.1.1源代码 1.1.2仿真代码 1.1.3仿真 1.2实验结果 1.2.1总结 2.循环移位实现LED流水灯 3.38译码器实现LED流水灯 3.1原理 3.2源程序 1.移位实现LED流水灯 1.1创建工程及源文件代码 1.1.1源代码 利用计数器计数到…

【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5

【深度学习】经典的深度学习模型-01 开山之作&#xff1a;CNN卷积神经网络LeNet-5 Note: 草稿状态&#xff0c;持续更新中&#xff0c;如果有感兴趣&#xff0c;欢迎关注。。。 0. 论文信息 article{lecun1998gradient, title{Gradient-based learning applied to document r…

【智能算法应用】长鼻浣熊优化算法求解二维路径规划问题

摘要 本文采用长鼻浣熊优化算法 (Coati Optimization Algorithm, COA) 求解二维路径规划问题。COA 是一种基于长鼻浣熊的觅食和社群行为的智能优化算法&#xff0c;具有快速收敛性和较强的全局搜索能力。通过仿真实验&#xff0c;本文验证了 COA 在复杂环境下的路径规划性能&a…

【微服务】springboot3 集成 Flink CDC 1.17 实现mysql数据同步

目录 一、前言 二、常用的数据同步解决方案 2.1 为什么需要数据同步 2.2 常用的数据同步方案 2.2.1 Debezium 2.2.2 DataX 2.2.3 Canal 2.2.4 Sqoop 2.2.5 Kettle 2.2.6 Flink CDC 三、Flink CDC介绍 3.1 Flink CDC 概述 3.1.1 Flink CDC 工作原理 3.2 Flink CDC…

数据结构:栈的创建、使用以及销毁

这里写目录标题 栈的结构与概念栈底层结构的选取栈的代码实现&#xff08;stack&#xff09;头文件&#xff08;stack.h&#xff09;栈的初始化栈的销毁入栈出栈获取栈顶数据获取栈大小代码的测试 栈的结构与概念 栈&#xff1a;⼀种特殊的线性表&#xff0c;其只允许在固定的…

【算法篇】动态规划类(1)(笔记)

目录 一、理论基础 1. 大纲 2. 动态规划的解题步骤 二、LeetCode 题目 1. 斐波那契数 2. 爬楼梯 3. 使用最小花费爬楼梯 4. 不同路径 5. 不同路径 II 6. 整数拆分 7. 不同的二叉搜索树 一、理论基础 1. 大纲 动态规划&#xff0c;英文&#xff1a;Dynamic Programm…

企业水、电、气、热等能耗数据采集系统

介绍 通过物联网技术&#xff0c;采集企业水、电、气、热等能耗数据&#xff0c;帮企业建立能源管理体系&#xff0c;找到跑冒滴漏&#xff0c;从而为企业节能提供依据。 进一步为企业实现碳跟踪、碳盘查、碳交易、谈汇报的全生命过程。 为中国碳达峰-碳中和做出贡献。 针对客…

【C++进阶】set的使用

1. 序列式容器和关联式容器 前面&#xff0c;我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间⼀般没有紧…

【工具箱】Flash基础及“SD NAND Flash”的测试例程

目录 一、“FLASH闪存”是什么&#xff1f; 1. 简介 2. 分类 3. 性能 4.可靠性 5.易用性 二、SD NAND Flash 1. 概述 2. 特点 3. 引脚分配 4. 数据传输模式 5. SD NAND寄存器 6. 通电图 7. 参考设计 三、STM32测试例程 1. 初始化 2. 单数据块测试 3. 多数据块…

场景题 - 画三角形并只点击三角形触发事件

简介 画一个三角形并仅点击三角形区域才会触发点击事件。 可以拆解成&#xff1a; 画个三角形绑定点击事件&#xff08;涉及点击区域&#xff09; 这里提供更多更好用的方法&#xff0c;svg polygon绘制三角形、canvas、css clip-path:polygon( ) 裁剪可视区域&#xff0c;并…

文件和目录的权限管理

定义&#xff1a; 文件和目录的权限管理在操作系统中至关重要&#xff0c;特别是在多用户环境下&#xff0c;它决定了不同用户对文件和目录的访问和操作权限。 一、基本权限类型及表示方法 在Linux系统中&#xff0c;文件和目录的权限分为三类&#xff1a;读取权限&#xff08;…

谷歌-BERT-第一步:模型下载

1 需求 需求1&#xff1a;基于transformers库实现自动从Hugging Face下载模型 需求2&#xff1a;基于huggingface-hub库实现自动从Hugging Face下载模型 需求3&#xff1a;手动从Hugging Face下载模型 2 接口 3.1 需求1 示例一&#xff1a;下载到默认目录 from transform…

南邮-软件安全--第一次实验报告-非爆破计算校验值

软件安全第一次实验报告&#xff0c;切勿直接搬运&#xff08;改改再交&#xff09; 实验要求 1、逆向分析目标程序运行过程&#xff0c;找到程序的关键校验点&#xff1b; 2、以非爆破的方式正确计算crackme的校验值&#xff1b; 内容 使用x32dbg对文件进行分析 打开文件…

思迈特:在AI时代韧性增长的流量密码

作者 | 曾响铃 文 | 响铃说 “超级人工智能将在‘几千天内’降临。” 最近&#xff0c;OpenAI 公司 CEO 山姆奥特曼在社交媒体罕见发表长文&#xff0c;预言了这一点。之前&#xff0c;很多专家预测超级人工智能将在五年内到来&#xff0c;奥特曼的预期&#xff0c;可能让这…