问题标题: 酷町堂:4976 喵阵

0
0
已解决
徐子宸
徐子宸
中级天翼
中级天翼

4976   喵阵

经验值:1600 时间限制:1000毫秒

题目描述 Description

喵阵如下:

A_0= \begin{pmatrix} 1 \end{pmatrix}A0​=(1​)

A_1= \begin{pmatrix} 1 & 1 \\ 1 & 0 \end{pmatrix}A1​=(11​10​)

A_2= \begin{pmatrix} 1 & 1 & 1 & 1\\ 1 & 0 & 1 & 0\\ 1 & 1 & 0 & 0\\ 1 & 0 & 0 & 1 \end{pmatrix}A2​=⎝⎜⎜⎛​1111​1010​1100​1001​⎠⎟⎟⎞​

可见,A_kAk​是一个2^k * 2^k2k∗2k 的矩阵。

现在告诉你kk的值,求第xx行第yy列的数字。

输入描述 Input Description

输入有一行,三个数,分别是k(1≤k≤30),x,y(1≤x,y≤2^k)。

输出描述 Output Description

输出有一个数,数值为0或1,表示第x行第y列的数字。

样例输入 Sample Input

2 2 2

样例输出 Sample Output

0

数据范围及提示 Data Size & Hint

来自酷町**提示:把每一个矩阵分成四个的小矩阵来看。

 

 

#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
bool find(int k,int x,int y){
    if(k==0)return 1;
    if(x>=(int)(pow(2,k-1))&&y>=(int)(pow(2,k-1))){
        return !find(k-1,x%(int)(pow(2,k-1)),y%(int)(pow(2,k-1)));
    }
    else return find(k-1,x%(int)(pow(2,k-1)),y%(int)(pow(2,k-1)));
}
int main(){
    int k,x,y;
    cin>>k>>x>>y;
    cout<<find(k,x,y);
    return 0;
}

60分代码,哪错了?

解出者必有重赏


0
已采纳
李博然
李博然
资深守护
资深守护
int f(int k,int x,int y)
{
    if(k==0) return 1;
    int mid=1<<(k-1);
    if(x<=mid&&y<=mid) return f(k-1,x,y);
    if(x<=mid&&y>mid) return f(k-1,x,y-mid);
    if(x>mid&&y<=mid) return f(k-1,x-mid,y);
    return 1-f(k-1,x-mid,y-mid);
}

核心

望采纳

0
0
曹灿阳
曹灿阳
初级天翼
初级天翼

1. 开long long

2. pow函数少用,贼**!建议使用位运算:1<<n表示2^n

0
我要回答