您的位置:首页 > 其它

L2-012. 关于堆的判断

2017-03-24 10:00 239 查看
开始有几组数据过不了,没看清楚题意。没有考虑负数的情况

然后我做的是直接读入一个字符串,然后判断里面的信息。这样的话,会显得代码别样丑。然后问了问别人,用的scanf,这样的话,就不用判断是不是负数了~

scanf 来一波

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 1000+10
int a[maxn];
void jd(int i)//建堆
{
if(i==1)
return ;
else{
if(a[i]<a[i/2])
swap(a[i],a[i/2]);
jd(i/2);
}
}
int n,m;
int findf(int k)
{
for(int i=1;i<=n;i++)
{
if(a[i]==k) return i;
}
}
int main()
{
// freopen("D://input.txt","r",stdin);
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
jd(i);
}
for(int ii=0;ii<m;ii++){
int x,y;char s[30],s1[30],s2[30];
scanf("%d",&x);
scanf("%s",s);
int k1=findf(x);
if(s[0]=='a')
{
scanf("%d",&y);
int k2=findf(y);
if(k1/2==k2/2) printf("T\n");
else printf("F\n");
scanf("%s %s",s,s1);//别忘了,将没有输完的字符串输完,要不然就到下一轮了
}
else
{
scanf("%s %s",s,s1);
if(s[0]=='a') {
scanf("%s %d",s2,&y);
int k2=findf(y);
if(k1/2==k2) printf("T\n");
else printf("F\n");
}
else if(s1[0]=='r')
{
if(k1==1) printf("T\n");
else printf("F\n");
}
else {
scanf("%s %d",s1,&
4000
amp;y);
int k2=findf(y);
if(k2/2==k1) printf("T\n");
else printf("F\n");
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: