jzoj P1507 普及模擬 數列

2021-07-28 22:08:54 字數 1208 閱讀 3181

題目描述

給定乙個等差數列,第一項是a, 從第二項開始,每項與前一項的差都是乙個定值b。如果用數學形式來表示,那麼可以表示成 a + b × x , 其中 x≧0,且是整數。例如: a = 1, b=2, 那麼這個等差數列就是:1,3,5,7,9…

再給定乙個等比數列,第一項是c, 從第二項開始,每項是前一項的d倍。如果用數學形式來表示等比數列,則是 c ×(dy)。 其中 y≧0, 且是整數。例如: c = 2, d = 3, 那麼這個等比數列就是:2,6,18,54…

你的任務是計算在1至upperbound內的正整數,有多少正整數是「合法」的?

所謂的「合法」是指:該整數屬於上面給定的等差數列的某項或者屬於等比數列的某項,或者既屬於等差數列的項也屬於等比數列的項。

輸入一行,5個整數,分別是a,b,c,d,upperbound。

(1≤a,b,c,upperbound≤1012, 1≤d≤105。)

對於80%的資料,1≤upperbound≤1000000。

輸出乙個整數,表示「合法」正整數的個數。

樣例輸入

1 1 1 2 1000

樣例輸出

題解;

1.等差數列因為2個數之間的值是固定值b,若a<=u就可以直接求出a~u之間等差數列的數量(u-a) div b+1。

2.等比數列直接做就好了,因為是逐級乘法,所以速度挺快的,不過要判斷*1的情況,如果等比數列某項c小於等差數列的初始項a就一定不在等差數列中,這時候就可以累加了,c=a的時候在等差數列中已經累加過了,如果c>a的話就判斷(c-a) mod b等不等於0,等於0就是在等差數列中,這時候不累加,否則累加。

var

ans,a,b,c,u:int64;

d:longint;

begin

readln(a,b,c,d,u);

if a<=u

then ans:=(u-a) div b+1;

while c<=u do

begin

if cthen inc(ans)

else

if c>a then

if (c-a) mod b<>0

then inc(ans);

c:=c*d;

if d=1

then

break;

end;

writeln(ans);

end.

jzoj P1330 迎接儀式

給出乙個不和諧的佇列,用 j 替代 教 z 替代 主 而乙個 j 與 z 組成的序列則可以描述當前的佇列。為了讓教主看得盡量舒服,你必須調整佇列,使得 jz 子串盡量多。每次調整你可以交換任意位置上的兩個人,也就是序列中任意位置上的兩個字母。而因為教主馬上就來了,時間僅夠最多作k次調整 當然可以調整...

jzoj P1331 超級教主

lhx教主很能跳,跳需要消耗能量,每跳1公尺就會消耗1點能量。教主為了收集能量,來到了乙個神秘的地方,教主的正上方每100公尺處就有乙個能量球 也就是這些能量球位於海拔100,200,300 公尺處 每個能量球所能提供的能量是不同的,一共有n個能量球 也就是最後乙個能量球在n 100公尺處 教主為了...

jzoj P3796 議案決定

國王手下有m個大臣,他們有一天對國王要處理的n件事務進行投票。每個大臣可以對兩件事務贊成或反對,格式如下 x c x y c y表示這個大臣對事務x的態度為c x,對事務y的態度為c y。如果國王的決定和某個大臣的兩個意見都不同,那麼這個大臣就會離開國王。小c認為不能讓任何乙個大臣離開國王,否則國王...