您的位置:首页 > 其它

Codeforces Round #407 (Div. 2) B. Masha and geometric depression

2017-03-31 00:17 302 查看
题目链接:http://codeforces.com/contest/789/problem/B

这真的是让我吐血的一道题目,WRONG了好多次,总是有情况没考虑到,或者题目理解有问题。

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include <math.h>
#include <map>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
const int maxn = 1e7;
int n,k;
map<__int64,bool>a;
int main(){
__int64 b1,q,l;
int m,t;
scanf("%I64d %I64d %I64d %d",&b1,&q,&l,&m);
for(int i=0;i<m;i++){
scanf("%d",&t);
a[t]=true;
//printf("%d\n",t);
}
if(abs(b1)>l){
printf("0\n");
}else if(b1==0){
if(a[b1]==true){
printf("0\n");
}else{
printf("inf\n");
}
}else if(q==0){
if(a[b1]==false&&a[q]==true){
printf("1\n");
}else if(a[b1]&&a[q]){
printf("0\n");
}else{
printf("inf\n");
}
}
else{
if(q==1){
if(a[b1]==false){
printf("inf\n");
}else{
printf("0\n");
}
}else if(q==-1){
if(a[b1]==false||a[b1*q]==false){
printf("inf\n");
}else{
printf("0\n");
}
}else{
__int64 x=b1;
int ans=0;
if(a[x]==false){ans++;}
//printf("-----%d\n",ans);
while(abs(x*q)<=l){
x=x*q;
if(a[x]==false)ans++;
//printf("%I64d %d\n",x,ans);
}
printf("%d\n",ans);
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: