记录一

你正在玩一个迷宫游戏,迷宫有n×n格,每一格有一个数字0或1,可以从某一格移动到相邻四格中的一格上。为了消磨时间,你改变了玩法,只许从0走到1或者从1走到0。

现在给你一个起点,请你计算从这个格子出发最多能移动多少个格子(包含自身)。

输入格式:

第1行包含两个正整数n和m(1≤n≤1000,1≤m≤10000)。

接下来n行,对应迷宫中的n行,每行n个字符,字符为0或者1,字符之间没有空格。

接下来m行,表示m次询问。每行2个正整数i,j,表示从迷宫中第i行第j列的格子开始走。

输出格式:

输出共m行,每行一个整数,分别对应于输入数据中的m次询问,给出最多能移动的格子数。

输入样例:

2  2
01
10
1  1
2  2
 

输出样例:

4
4

#include<cstdio>
#include<string>
using namespace std;
int n,m,x,y,k[1001][1001],ans[100001];
char s[1001][1001];
void dfs(int r,int i,int x,int y)
{
    int flag;
    if(x>n||x<0||y>n||y<0||k[x][y])
    flag=0;
    else 
    flag=1;
    if(r!=s[x][y]-'0' ||!flag ) return;
    k[x][y]=i; ans[i]++;
    dfs(!r,i,x-1,y);dfs(!r,i,x+1,y);
    dfs(!r,i,x,y-1);dfs(!r,i,x,y+1);
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
        scanf("%s",s[i]);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        --x;--y; 
        if(!k[x][y])
            dfs(s[x][y]-'0',i,x,y);
        else ans[i]=ans[k[x][y]];
        printf("%d\n",ans[i]);
    }
    return 0;
}

DFS

112123123412345···········

输入格式:

第一行包含一个正整数t(1≤t≤10),表示百漂怪挑了t次。 接下来t行,每行一个正整数x (1 ≤ x≤ 2^31-1),表示第i次,百漂怪挑的是第x位。

输出格式:

输出共t行,每行输出对应第x位上的数。

输入样例1:

2
3
8
 

输出样例1:

2
2
 

输入样例2:

6
222
66666
99999999
66656565
22222
2
 

输出样例2:

6
4
9
4
1
1

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
unsigned int a[32000];
void creat()
{
    unsigned int n=1;
    int i;
    a[1]=1;
    for(i=2;i<=31268;i++)
    {
        n=n+(int)log10((double)i)+1;
        a[i]=a[i-1]+n;
    }
}
int main()
{
    int n,t,x,i,k,ii;
    cin>>t;
    creat();
    for(ii=1;ii<=t;ii++)
    {
        cin>>x;
        for(i=1;i<=31268;i++)
        {
            if(x<=a[i])
            {
                k=i;break;
            }
        }
        int sum=x-a[i-1],l=0,ll=0;
        for(i=1;i<=k;i++)
        {
            l+=(int)log10((double)i)+1;
            if(sum<=l)
            break;
        }
        ll=(int)log10((double)i)+1;
        l=l-ll;
        int kk=sum-l;
        int ii;
        for(ii=kk+1;ii<=ll;ii++)
        {
            i=i/10;
        }
        cout<<i%10<<endl;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/KIDKK/p/12527531.html