数据有问题吧?

我写的错误朴素,结果A了,话说BST的数据是有多弱啊....
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=1000+100;
int T,n,tree[maxn],ma[maxn],mi[maxn];
bool sign;
void work(int t);
void init()
{
freopen("steak.in","r",stdin);
freopen("steak.out","w",stdout);
}
bool les()
{
for(int i=1;i<=n;i++)
{
if((i<<1)>n)break;
if(tree[(i<<1)]>=tree[i])
{
if((i<<1)+1>n)break;
if(tree[(i<<1)+1]<tree[i])return false;
}
else return false;
}return true;
}
bool gre()
{
for(int i=1;i<=n;i++)
{
if((i<<1)>n)break;
if(tree[(i<<1)]<=tree[i])
{
if((i<<1)+1>n)break;
if(tree[(i<<1)+1]>tree[i])return false;
}
else return false;
}return true;
}
bool inc()
{
for(int i=1;i<=n;i++)
{
int x=i<<1;
if(x<=n)
{
if(tree[x]<=tree[i])
{
if(x+1<=n)
{
if(tree[x+1]<tree[i])return false;
}else break;
}else return false;
}else break;
}return true;
}
bool dec()
{
for(int i=1;i<=n;i++)
{
int x=i<<1;
if(x<=n)
{
if(tree[x]>=tree[i])
{
if(x+1<=n)
{
if(tree[x+1]>tree[i])return false;
}else break;
}else return false;
}else break;
}return true;
}
int read()
{
int data=0;char lie=getchar();
while(lie>'9' || lie<'0')lie=getchar();
do
{
data=data*10+lie-'0';
lie=getchar();
}while(lie>='0' && lie<='9');
return data;
}
void readdata()
{
T=read();
for(int t=1;t<=T;t++)
{
n=read();
for(int i=1;i<=n;i++)tree[i]=read();
work(t);
}
}
void work(int t)
{
printf("Case #%d: ",t);
bool heap=0;
if(les()||gre())heap=1;
bool sor=0;
if(inc()||dec())sor=1;
if(heap && sor)
{
printf("Both\n");
}
else if(heap && !sor)
{
printf("Heap\n");
}
else if(!heap&& sor)
{
printf("BST\n");
}
else printf("Neither\n");
}
int main()
{
//init();
readdata();
return 0;
}
关于bst的朴素是错的吧!!这也能A!

1 条评论

  • @ 2014-11-01 23:06:28

    我第一次也是交了个错的代码但是A了--
    ###Block Code
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define maxn 1001
    int a[maxn],n,T,ls,rs;
    bool heapl,heapg,bstu,bstd;
    inline void case_init()
    {
    scanf("%d",&n);
    for(int i=1;i<=n;++i) scanf("%d",&a[i]);
    }
    inline void case_solve(int kase)
    {
    heapl=heapg=bstu=bstd=true;
    for(int i=1;i<=n;++i)
    {
    ls=i<<1; rs=(i<<1)+1;
    if(ls>n) continue;
    if(a[i]>a[ls]) bstd=heapl=false;
    else bstu=heapg=false;
    if(rs>n) continue;
    if(a[i]>a[rs]) bstu=heapl=false;
    else bstd=heapg=false;

    }
    printf("Case #%d: ",kase);
    bool heap=heapg||heapl;
    bool bst=bstu||bstd;
    if(heap&&bst) puts("Both");
    else if(heap) puts("Heap");
    else if(bst) puts("BST");
    else puts("Neither");
    }
    int main()
    {
    scanf("%d",&T);
    for(int i=1;i<=T;++i)
    {
    case_init();
    case_solve(i);
    }
    return 0;
    }

  • 1

信息

ID
1897
难度
7
分类
(无)
标签
(无)
递交数
1233
已通过
215
通过率
17%
被复制
4
上传者