问题标题: 请问这个2015的代码为什么错

0
1
已解决
李庚午
李庚午
中级守护
中级守护

 RT,调了很久也过不了样例……蒟蒻求指教

#include<bits/stdc++.h>
using namespace std;
int m,n,total,last,del_count,w,h;
int tree[1<<10];
char p[(1<<8)*3][(1<<8)*6];
void init()
{
    for(int i=1;i<=(1<<10);i++) tree[i]=1;
}
int get_id(int x,int y)
{
    return pow(2,x-1)-1+y;
}
void del(int id)
{
    if (id>total) return;
    tree[id]=0;
    del(id*2);
    del(id*2+1);
}
void draw(int id,int& x,int& y)
{
    if (id>last)
    {
        x=h;
        int tmp=id-last;
        y=6*((tmp-1)/2)+(tmp%2!=0?1:5);
        if (tree[id]) p[x][y]='o';
        else del_count++;
        return;
    }
    int lx,ly,rx,ry;
    draw(id*2,lx,ly);
    draw(id*2+1,rx,ry);
    y=(ly+ly)/2;
    x=lx-(ry-ly)/2;
    if (tree[id])
    {
        p[x][y]='o';
        for(int i=1;i<(ry-ly)/2;i++)
        {
            if(tree[id*2]) p[x+i][y-i]='/';
            if(tree[id*2+1]) p[x+i][y+i]='\\';
        }
    }
    else del_count++;
}
int main()
{
    cin>>m>>n;
    total=pow(2,m)-1;
    last=pow(2,m-1)-1;
    int n0=last+1;
    w=n0/2*5+n0/2-1;
    h=w/2+1;
    init();
    for(int i=1;i<=n;i++)
    {
        int x,y;
        cin>>x>>y;
        del(get_id(x,y));
    }
    int x,y;
    draw(1,x,y);
    cout<<total-del_count<<endl;
    for(int i=1;i<=h;i++)
    {
        for(int j=1;j<=w;j++)
        {
            if(p[i][j]=='\\'||p[i][j]=='/'||p[i][j]=='o') cout<<p[i][j];
            else cout<<" ";
        }
        cout<<endl;
    }
    return 0;
}

 


0
已采纳
王星河
王星河
资深光能
资深光能

你把第 27 行的 tmp%2!=0 改成 tmp%2==0 就可以了。

0
0
我要回答