L2-012. 关于堆的判断

    xiaoxiao2021-03-25  37

    开始有几组数据过不了,没看清楚题意。没有考虑负数的情况 然后我做的是直接读入一个字符串,然后判断里面的信息。这样的话,会显得代码别样丑。然后问了问别人,用的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,&y); int k2=findf(y); if(k2/2==k1) printf("T\n"); else printf("F\n"); } } } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-150109.html

    最新回复(0)