SRM 523 div2
250pt.
一个水题,直接一个dfs就行了,很久没敲代码,比赛的时候写错一个判断条件,卡了很久才发现。。。。。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <vector>
using namespace std;
class AlphabetPath
{
public:
string doesItExist(vector<string> M);
};
int sx[4]={1,-1,0,0};
int sy[4]={0,0,-1,1};
int r=0,c=0;
int istrue=0;
bool dfs(int i,int j,int k,vector<string>M)
{
if(istrue==1)
return true;
if(k==26)
{
istrue=1;
return true;
}
for(int t=0;t<4;t++)
{
int fx=i+sx[t];
int fy=j+sy[t];
if(fx>=0 && fx<r && fy>=0 && fy<c)
{
if(M[fx][fy]==(char)('A'+k))
dfs(fx,fy,k+1,M);
}
}
if(istrue==1)
return true;
return false;
}
string AlphabetPath::doesItExist(vector<string> M)
{
r = M.size();
c = M[0].size();
int ok=0;
int ans=0;
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
if(M[i][j]=='A')
{
istrue=0;
if(dfs(i,j,1,M)==true)
ans=1;
ok=1;
break;
}
}
if(ok==1)
break;
}
if(ans==0)
return "NO";
else
return "YES";
}
500pt。
第一种数 a+bx 的个数可以直接算出, (m-a)/b+1; 注意a<m的情况。。。。。
再枚举第二种数 c*d^y 。第二种数的个数不会有很多。
判断的时候要注意各种边界。。。。。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cmath>
#include <vector>
using namespace std;
class CountingSeries
{
public:
long long countThem(long long a, long long b, long long c, long long d, long long m)
{
long long ans = 0;
if(m>=a)
ans = (m-a)/b+1;
if(c<=m)
{
if(c<a)
ans+=1;
if(c>=a && (c-a)%b!=0)
ans+=1;
}
if(d==1)
return ans;
for(long long t=c*d; ;t*=d)
{
if(t>m)
break;
if(t<a)
ans+=1;
if(t>=a && (t-a)%b!=0)
ans+=1;
}
return ans;
}
};
浙公网安备 33010602011771号