- 学姐吃牛排
- 2014-11-01 17:16:47 @
我写的错误朴素,结果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 条评论
-
theShadow LV 7 @ 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
- 上传者