2023山东ICPC省赛Problem E. Math Problem

2024-05-27 20:28

本文主要是介绍2023山东ICPC省赛Problem E. Math Problem,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2023 山东 I C P C 省赛 P r o b l e m E . M a t h P r o b l e m \Huge{2023山东ICPC省赛Problem E. Math Problem} 2023山东ICPC省赛ProblemE.MathProblem

文章目录

  • 题意
  • 思路
  • 标程

比赛链接:Dashboard - The 13th Shandong ICPC Provincial Collegiate Programming Contest - Codeforces

官方题解:E - 数学问题 - SUA Wiki

题意

首先给出五个数字: n , k , m , a , b n,k,m,a,b n,k,m,a,b;然后可以对n执行进行以下两种操作任意次:

  • 选择一个整数 x ( 0 ≤ x ≤ k ) x(0 \le x \le k) x(0xk);令 n = k × n + x n=k\times n + x n=k×n+x,该操作每次花费 a a a枚金币,每次选择的 x x x可以不同。
  • 令$n=\left \lfloor \frac{n}{k} \right \rfloor ,该操作每次花费 ,该操作每次花费 ,该操作每次花费b$枚金币。

求将 n n n变为** m m m的倍数**最少需要花费几枚金币( 0 0 0是任何正整数的倍数)。

数据范围:

  • ( 1 ≤ n ≤ 1 0 18 1\leq n\leq 10^{18} 1n1018, 1 ≤ k , m , a , b ≤ 1 0 9 1\leq k, m, a, b\leq 10^9 1k,m,a,b109)

思路

跟据两种操作,我们会发现,若执行一次操作①后,再执行一次操作②;那么这两次操作可以相互抵消, n n n的值不变。

因此我们会发现,执行完操作①之后将不再会执行操作②。

跟据题目数据范围可知,操作①和操作②之和不会超过 200 200 200次,是比较小的。然后跟据上面的结论,我们可以暴力枚举先执行操作②的次数。

由于操作①有+x的情况,因此进行 p p p次操作①后, n n n的范围为: [ k p × n 0 , k p × ( n 0 + 1 ) − 1 ] [k^p\times n_0,k^p\times (n_0+1)-1] [kp×n0,kp×(n0+1)1](其中 n 0 n_0 n0 n n n完成除法操作时的值),因此只要 n n n在此区间即可停止乘法操作。

需要注意的是,在枚举的过程中,答案可能会超过long long范围,因此需要使用__int128__int128无法直接读入和输出,只能使用快读读入)。

其实我们在计算 n n n的范围时,只需要将其对 m m m取模即可,因为我们只需要判断当前 n n n的值距离 m m m的倍数的距离即可。

标程

#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr);
#define int long long 
#define ULL unsigned long long 
#define PII pair<int, int>
#define lowbit(x) (x & -x)
#define Mid ((l + r) >> 1)
#define ALL(x) x.begin(), x.end()
#define endl '\n'
#define fi first 
#define se secondconst int INF = 0x7fffffff;
const int Mod = 1e9 + 7;
const int N = 2e5 + 10; void Solved() { int n, k, m, a, b; cin >> n >> k >> m >> a >> b;if(n % m == 0) {cout << "0\n"; return;}if(k == 1) {cout << "-1\n"; return;}int res = 1e18, cost = 0;//双重循环,第一层枚举除的次数,第二层枚举乘的次数while(1) {int base = n % m, p = 1;for(int i = 0; ; i ++ ) {int d = (m - base) % m;//需要对m取模,表示距离每个m的倍数的位置// int d = m - base;// if(d == m) d = 0;if(d < p) {res = min(res, cost + i * a);break;}base = base * k % m;p = p * k;//对于x的累加不需取模}if(n == 0) break;n /= k;cost += b;}cout << res << endl;
}signed main(void) {IOSint ALL = 1; cin >> ALL;while(ALL -- ) Solved();// cout << fixed;//强制以小数形式显示// cout << setprecision(n); //保留n位小数return 0;
}

这篇关于2023山东ICPC省赛Problem E. Math Problem的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008509

相关文章

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

10400 -Game Show Math

这道题的话利用了暴力深搜,尽管给了20S,但是这样还会超时,所以就需要利用回溯进行减枝,因为是DFS,所以用一个数组vis[i][j]记录是否在状态i时候取到过j值,如果取到过的话,那么直接回溯(往后搜索已经没有意义了,之前到达这个状态的时候是无法得到结果的) 还有需要注意的地方就是题目的要求,每一步的结构都在(-32000,32000)之间,所以需要一步判断,如果在这个范围外直接回溯 最后一

2023 CCPC(秦皇岛)现场(第二届环球杯.第 2 阶段:秦皇岛)部分题解

所有题目链接:Dashboard - The 2023 CCPC (Qinhuangdao) Onsite (The 2nd Universal Cup. Stage 9: Qinhuangdao) - Codeforces 中文题面: contest-37054-zh.pdf (codeforces.com) G. Path 链接: Problem - G - Codeforces

2014年ACM/ICPC亚洲区现场赛广州赛区总结

本来不想提这件事的,后来学姐找我谈心时提到这件事,我突然意识到在这件事情上我错了一次,明明答应的去参加这场比赛,最后临时决定不去......其实中间有很多很多原因 1:我和tyh,sxk临时不去主要是广州太远,我们身上money不够,呵呵。。。别笑我们,你以为我们是高富帅啊,去一趟广州消费要2个月的生活费,奖学金又没发,你让我找我妈要她辛辛苦苦挣来的工资吗?!从哈尔滨到广州单来回的火车票每个人就

11991 - Easy Problem from Rujia Liu?

题意: 输入一串整型数列,再输入两个数k,v,输出第k个v的序号。不存在则输出0,如第一个样例 8 41 3 2 2 4 3 2 11 3 //第1个3,序号为2,输出22 4 //第2个4,不存在,输出03 2 //第3个2,序号为7,输出74 2 思路: struct num {

Python的math库——常用数学函数全解析

文末赠免费精品编程资料~~ 一、math模块简介 math 是 Python 内置的一个标准库,它包含了许多执行复杂数学运算的函数,如三角函数、对数函数、指数函数等。 二、常用函数详解与示例 基本数学运算 math.sqrt(x): 计算平方根。 import math# 计算平方根result = math.sqrt(16)print(result) # 输出 4.0 mat

找不同-第15届蓝桥省赛Scratch初级组真题第4题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第183讲。 如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,查阅教程更方便。 第15届蓝桥杯省赛已于2024年8月24日落下帷幕,编程题一共有5题,分别如下: 猪八戒落地 游乐场 画西瓜 找不同 消