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;

	   }

};

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(div)