Masha really loves algebra. On the last lesson, her strict teacher Dvastan gave she new exercise.
You are given geometric progression b defined by two integers b1 and q. Remind that a geometric progression is a sequence of integers b1, b2, b3, ..., where for each i > 1 the respective term satisfies the condition bi = bi - 1·q, where q is called the common ratio of the progression. Progressions in Uzhlyandia are unusual: both b1 and q can equal 0. Also, Dvastan gave Masha m "bad" integers a1, a2, ..., am, and an integer l.
Masha writes all progression terms one by one onto the board (including repetitive) while condition |bi| ≤ l is satisfied (|x| means absolute value of x). There is an exception: if a term equals one of the "bad" integers, Masha skips it (doesn't write onto the board) and moves forward to the next term.
But the lesson is going to end soon, so Masha has to calculate how many integers will be written on the board. In order not to get into depression, Masha asked you for help: help her calculate how many numbers she will write, or print "inf" in case she needs to write infinitely many integers.
The first line of input contains four integers b1, q, l, m (-109 ≤ b1, q ≤ 109, 1 ≤ l ≤ 109, 1 ≤ m ≤ 105) — the initial term and the common ratio of progression, absolute value of maximal number that can be written on the board and the number of "bad" integers, respectively.
The second line contains m distinct integers a1, a2, ..., am (-109 ≤ ai ≤ 109) — numbers that will never be written on the board.
Print the only integer, meaning the number of progression terms that will be written on the board if it is finite, or "inf" (without quotes) otherwise.
3 2 30 4 6 14 25 48
3
123 1 2143435 4 123 11 -5453 141245
0
123 1 2143435 4 54343 -13 6 124
inf
In the first sample case, Masha will write integers 3, 12, 24. Progression term 6 will be skipped because it is a "bad" integer. Terms bigger than 24 won't be written because they exceed l by absolute value.
In the second case, Masha won't write any number because all terms are equal 123 and this is a "bad" integer.
In the third case, Masha will write infinitely integers 123.
题意:大概是给首项b1和公比q,数列中的数的绝对值不能超过 l,和不好的数的个数 m,不好的数定义为:不是数列中的数,让你求出最后形成的数列最多有多少个(在形成数列的时候,如果出现了不好的数,不能加入数列,继续向下执行)
思路:模拟。讨论:
1. q == 0 2.b1 == 0 3.q = 1 4.q == -1这几种情况比较特殊
用set来查找。
AC代码:
#include <cstdio>
#include <iostream>
#include <cmath>
#include <set>
using namespace std;
typedef long long ll;
ll b,q,l,m;
set<ll>s;
ll a;
int main() {
cin >> b >> q >> l >> m;
while(m--) {
cin >> a;
s.insert(a);
}
if(abs(b) > l) {
cout << "0" << endl;
return 0;
}
if(b == 0) {
if(s.find(b) == s.end()) {
cout << "inf" << endl;
} else {
cout << "0" << endl;
}
return 0;
}
if(q == 0) {
if(s.find(0) == s.end()) {
cout << "inf" << endl;
} else if(s.find(b) == s.end()) {
cout << "1" << endl;
} else {
cout << "0" << endl;
}
return 0;
}
if(q == 1) {
if(s.find(b) == s.end()) {
cout << "inf" << endl;
} else {
cout << "0" << endl;
}
return 0;
}
if(q == -1) {
if(s.find(b) == s.end() || s.find(-b) == s.end()) {
cout << "inf" << endl;
}else{
cout << "0" << endl;
}
return 0;
}
int cnt = 0;
while(abs(b) <= l){
if(s.find(b) == s.end()){
cnt++;
}
b *= q;
}
cout << cnt << endl;
return 0;
}
注意:模拟的时候很容易漏掉情况 首项>l