首页 > 其他分享 >P9560 [SDCPC2023] E-Math Problem

P9560 [SDCPC2023] E-Math Problem

时间:2023-08-22 19:48:16浏览次数:41  
标签:P9560 cnt 满足条件 res SDCPC2023 len lld% ans Problem

思路

首先发现应该优先除,理由很简单,如果先乘以 \(k\) 再加上一个不超过 \(k\) 的值,那么除以 \(k\) 后,就除回去了,没有发生任何变化。

所以我们可以先枚举除以多少次 \(k\),得到除以这么多次 \(k\) 后的 \(n\)。我们再进行若干次乘法,计算 \(n\) 的取值范围 \([l,r]\),那么只要这个区间包含了 \(m\) 的倍数就行。

易知对 \(n\) 进行 \(x\) 次乘法操作后的取值区间是 \([k^x\times n,k^{x+1}\times n-1]\)。

所以我们可以只记录区间左端点 \(l\) 和区间长度 \(len\),这是为了方便后面的取模操作判断是否包含 \(m\) 的倍数。

因为只要包含倍数,所以左端点 \(l\) 可以模 \(m\),这样 \(l+len\geq m\) 或者 \(m-l\leq len\) 就代表满足条件,记录下次数就可以得到答案,然后取最小值就可以了。

AC 代码

#include<bits/stdc++.h>
using namespace std;
long long T,n,k,m,a,b,ans,res,cnt,l,len,rp;
int main()
{
	scanf("%lld",&T);
	while(T--)
	{
		scanf("%lld%lld%lld%lld%lld",&n,&k,&m,&a,&b);
		if(n%m==0){printf("0\n");continue;}//直接满足条件
		if(k==1){printf("-1\n");continue;}//乘以和除以都没用,所以无解
		ans=0x3f3f3f3f3f3f3f3f,cnt=rp=0;
		while(1)
		{
			l=n%m,len=1,res=cnt;//此处的len多了1,方便计算,判断也只需要把>=变成>即可
			for(int i=1;;++i)
			{
				if(len>(m-l)%m){ans=min(ans,res);break;}//满足条件
				res+=a,l*=k,len*=k,l%=m;//进行一次乘法操作
			}
			if(!n) break;//n为0也算满足条件,同时也不用继续进行除法操作
			n/=k,cnt+=b;
		}
		printf("%lld\n",ans);
	}
}

标签:P9560,cnt,满足条件,res,SDCPC2023,len,lld%,ans,Problem
From: https://www.cnblogs.com/One-JuRuo/p/17649511.html

相关文章

  • P9556 [SDCPC2023] A-Orders 题解
    题目传送门一道模拟题。可以命名一个订单的结构体,然后将订单的结束时间进行排序。用一个变量模拟货物的数量,每遇到一个订单,货物的数量就会加上距离上一个订单的天数乘上\(k\)。即对于第\(i\)个订单,距离第\(i-1\)订单货物数量增加了\((a_{i}-a_{i-1})\timesk\)。如果在模......
  • Math Problem
                                                  E-MathProblem##题面翻译**【题目描述】**给定两个正整数$n$和$k$,您可以进行以下两种操作任意次(包括零次):-选择一个整数......
  • 文件解压 //problem/2928 or /contest/1709/problem/3
    字符串套递归#include<bits/stdc++.h>usingnamespacestd;chars[1005];intn,i;stringwork(){stringp;intt=0;while(++i<=n){if(s[i]>='0'&&s[i]<='9'){t=s[i]-'0......
  • CF1858C Yet Another Permutation Problem 题解
    思路这个题是一个简单的构造题。竟然比T2简单,也是少见我们可以首先从\(1\)开始不断乘以\(2\),像这样:\(1,2,4,8,16\cdots,2^x\),直到什么时候超过\(n\)就停止。这样相邻两个数字就可以凑出\(1,2,4,6,\cdots,2^{x-1}\),保证两两不同。然后我们可以从\(3\)开始不......
  • CF1858C Yet Another Permutation Problem 题解
    杂言赛时想到做法,结果调code把自己心态调炸了,所以来写一篇题解(恼)。另:此题与P9345夕阳西下几时回几乎相同,可以此练手。另另:本题多测,多测不清空,爆零两行泪。题意翻译\(a_1,a_2,\dots,a_n\)是\(1\)至\(n\)的一个排列,记\(d_i=\gcd(a_i,a_{i\bmodn+1})\)。构造一个......
  • CF776D The Door Problem
    题目大意给定门和钥匙的数量,每把钥匙控制\(k_i\)扇门,每扇门被两把钥匙控制。给定初始时每扇门的状态,求是否存在一种方法使得所有的门都打开。思路扩展域并查集。考虑分类讨论:对于开着的门,要么两把钥匙都用,要么两把钥匙都不用;对于关着的门,两把钥匙只能用一把。那么我们......
  • 胡萝卜问题 Carrot Problems
    Refhttps://www.atvbt.com/the-carrot-problem/......
  • more and more construction problem,what should i do ?
    一些构造CF1464FShowingOff显然原图连边会形成若干内向基环树森林,所有在同一个环上的点\(S\)是相同的,注意到原图是二分图,因此所有环都是偶环。一个重要观察是,我们可以让所有环的长度都是2,因为总可以把长度\(>2\)的环拆成若干个二元环,而且在\(S_{i,j}\geq2\)的限制......
  • Random Walk Problem
    Notice:ThisarticleisjustashortdiscussiononRandomWalkproblem,Icompute\(E(X^2)\)inthisarticle.AfterIreadsomematerials,fromaprogrammer'sperspective,IhavefoundthatthisproblemisnotjustsimpleasIthink,andit's......
  • An Easy Problem(二分)
    GDCPCA题原题链接:https://cpc.csgrandeur.cn/csgoj/problemset/problem?pid=1168类似的题目及视频解释链接:题目:https://www.acwing.com/problem/content/description/4083/相关视频讲解https://www.acwing.com/video/3568/本题可以转化成二维数组,每一行数都是呈现递增的,所以......