模拟试——guess

来源:互联网 发布:java quartz 日志级别 编辑:程序博客网 时间:2024/05/21 02:37

题目大意:
这里写图片描述
这里写图片描述

题解:
因为答案要么在-10000~10000中,所以我们建一个区间[l,r],根据每一个回答去修改区间,最后输出l,如果修改过程中l>r就不用做修改了,直接输出Impossible。
如果是N,就把前面的当反语看,注意
“<”号 跟“>”号,反语是“>=”,“<=”,而不仅仅是“>”,“<”。
而<=,>=反语就仅仅只是“<”,“>”了。

时间复杂度:O(N)

var    ans,i,j,k,n,l,r:longint;    a,b,c,s:string;begin    assign(input,'guess.in'); reset(input);    assign(output,'guess.out'); rewrite(output);    readln(n);    l:=-10000; r:=10000;    for i:=1 to n do    begin         readln(s);         if r>=l then         begin           j:=pos(' ',s); a:=copy(s,1,j-1); delete(s,1,j);           j:=pos(' ',s); b:=copy(s,1,j-1); delete(s,1,j);           val(b,k);           if s='Y'              then begin                        if (a='>=') or (a='>') then                        begin                             if a='>' then inc(k);                             if k>l then l:=k;                        end;                        if (a='<') or (a='<=') then                        begin                            if a='<' then dec(k);                           if k<r then r:=k;                        end;                   end              else begin                        if (a='>=') or (a='>') then                        begin                              if a='>=' then dec(k);                              if k<r then r:=k;                        end;                        if (a='<') or (a='<=') then                        begin                           if a='<=' then inc(k);                           if k>l then l:=k;                        end;                   end;          end;    end;    if l>r then writeln('Impossible')           else writeln(l);    close(input); close(output);end.