• [洛谷1580]yyy loves Easter_Egg I


    题目背景

    Soha的出题效率着实让人大吃一惊。OI,数学,化学的题目都出好了,物理的题还没有一道。于是,Huntfire,absi2011,lanlan对soha进行轮番炸,准备炸到soha出来,不料,人群中冲出了个kkksc03……

    题目描述



    yyy loves OI(Huntfire),yyy loves Maths(lanlan),yyy loves Chemistry(absi2011)对yyy loves Physics(soha)进行轮番炸,轰炸按照顺序进行,顺序为Huntfire,lanlan,absi2011。
    现在这一题中吗,我们不考虑太复杂的队形形式。我们认为只要这一句内含有且恰好含有一次@,@的人和上一句话一样就算为队形。
    比如以下也视为队形
    yyy loves OI : @yyy loves Microelectronic 
    yyy loves Maths : @yyy loves Microelectronic 我佩服soha的出题效率
    yyy loves OI : @yyy loves Microelectronic +1
    yyy loves Chemistry : +1 @yyy loves Microelectronic 
    若艾特的人与第一个人不同,就算队形被打破。若这个人在队形被打破之前出来吱声了,或者就是他打破队形了,就算(油)炸成功了。若(油)炸成功,输出“Successful @某某某 attempt”,若队形被破坏先输出“Unsuccessful @某某某 attempt”,再输出队形第一次被破坏的行数与第一次破坏队形的人的id。如果队形一直没被打破,就先输出“Unsuccessful @某某某 attempt”,再输出队形的长度,最后输出"Good Queue Shape"/* yyy loves Microelectronic 是kkksc03*/

    输入输出格式

    输入格式:

    N行,为轰炸开始后的一段消息记录,每行一条消息。消息格式:“消息发送者 + ‘ : ’+消息内容”,每行消息长度不超过1000。(中文用拼音代替了)

    输出格式:

    若(油)炸成功,输出“Successful @某某某 attempt”,若队形被破坏第一行输出“Unsuccessful @某某某 attempt”,接下来一行输出队形第一次被破坏的行数,第三行输出第一次破坏队形的人的id,如果队形一直没被打破,就先输出“Unsuccessful @某某某 attempt”,再输出队形的长度,最后输出"Good Queue Shape"

    输入输出样例

    输入样例#1:

    yyy loves OI : @yyy loves Physics wo pei fu ni de chu ti xiao lv
    yyy loves Maths : @yyy loves Physics wo pei fu ni de chu ti xiao lv
    yyy loves Chemistry : @yyy loves Physics wo pei fu ni de chu ti xiao lv
    yyy loves Microelectronic : ni men wu liao me 
    yyy loves OI : @yyy loves Physics wo pei fu ni de chu ti xiao lv
    
    

    输出样例#1:

    Unsuccessful @yyy loves Physics attempt
    4
    yyy loves Microelectronic
    

    输入样例#2:

    yyy loves OI : @yyy loves Physics wo pei fu ni de chu ti xiao lv
    yyy loves Maths : @yyy loves Physics wo pei fu ni de chu ti xiao lv
    yyy loves Chemistry : @yyy loves Physics wo pei fu ni de chu ti xiao lv
    yyy loves OI : @yyy loves Physics wo pei fu ni de chu ti xiao lv
    yyy loves Maths : @yyy loves Physics wo pei fu ni de chu ti xiao lv
    yyy loves Chemistry : @yyy loves Physics wo pei fu ni de chu ti xiao lv
    yyy loves OI : @yyy loves Physics wo pei fu ni de chu ti xiao lv
    yyy loves Maths : @yyy loves Physics wo pei fu ni de chu ti xiao lv
    yyy loves Chemistry : @yyy loves Physics wo pei fu ni de chu ti xiao lv
    yyy loves Physics : ni men gou le 
    
    

    输出样例#2:

    Successful @yyy loves Physics attempt
    

    说明

    @yyy loves Physics 我佩服你的出题效率
    此题仅吐槽soha,纪念出题者的队形,此队形长达91行。 
    对于100%的数据,每行消息长度<=1000
    保证行数不超过50000
    保证输入文件大小不超过4M
    保证第一个说话的一定在艾特某人
    保证大家的名字都是yyy loves ____ 的格式
    保证每个人说的话中没有":"
    保证第一个说话的一定艾特了一个人且只@了一个人
    保证第一个说话的一定不会艾特自己
    保证文件结束一定有一行空行 方便你判定文件结束
    并不保证后面说话的艾特了几个人 然而艾特人数不为一个人视为破坏队形
    并不保证后面说话是否会反复艾特同一个人
    并不保证被炸的人一定破坏队形
    并不保证这一题是或不是压轴题
    并不保证这一套比赛存在压轴题
    并不保证下一套比赛和这一套比赛一样水
    并不保证群里除了这4个人和kkksc以外没有别人了
    并不保证你没AC这题的情况下吐槽soha不会出事儿
    AC了可以吐槽soha一句,soha不会介意。

    思路

      即使你没有保证然而我还是要吐槽,太恶心了这个题,字符串处理的题即使思路清晰,到最后也会被什么空格和各式各样的字符串函数搞得头昏脑涨。这道题我最高可以调到60分,但是我已经考虑到了所有题目描述中可能会有的情况,不管了,贴出源码,有神犇路过还请指教。

    var i,j,sum,x,a,n:longint;
        s,juzi,id,iid,s1,ss,xx:ansistring;
    
    procedure success;
    begin
        writeln('Successful @',id,' attempt');
        halt;
    end;
    //at successfully
    
    procedure ending;
    begin
        writeln('Unsuccessful @',id,' attempt');
        writeln(sum-1);
        writeln('Good Queue Shape');
        halt;
    end;
    //to the end
    
    procedure prime;
    begin
        writeln('Unsuccessful @',id,' attempt');
        writeln(sum);
        writeln(xx);
        halt;
    end;
    //break
    
    begin
        readln(s);
        x:=pos(':',s);
        delete(s,1,x+2);
        id:='yyy loves ';
        delete(s,1,10);
        a:=pos(' ',s);
        ss:=copy(s,1,a-1);
        id:=id+ss;
        n:=length(id);
        delete(s,1,n-9);
        sum:=1;
        while true do
            begin
                inc(sum);
                readln(s1);
                if s1='' then ending;
                x:=pos(':',s1);
                xx:=copy(s1,1,x-1);
                if xx=id+' '  then success;
                a:=pos('@',s1);
                if a=0 then prime;
                s1[a]:='*';
                delete(s1,1,x+2);
                iid:='yyy loves ';
                delete(s1,1,10);
                a:=pos(' ',s1);
                ss:=copy(s1,1,a-1);
                iid:=iid+ss;
                if (iid<>id) then prime;
                a:=pos('@',s1);
                if a<>0 then
                    begin
                        delete(s1,1,x+2);
                        iid:='yyy loves ';
                        delete(s1,1,10);
                        a:=pos(' ',s1);
                        ss:=copy(s1,1,a-1);
                        iid:=iid+ss;
                        if iid<>id then prime;
                    end;
            end;
    end.
    View Code

    STD

    var c,d,e:longint;  //c:队形长度;d:'@'位置;e:b的长度  
        a,b:ansistring;  //a:输入的字符串;b:@的人  
        
    begin    
      readln(a);    
      a:=a+' ';    
      c:=2;    
      d:=pos('@',a);    
      b:='yyy loves ';    
      e:=d+11;    
      while a[e]<>' ' do begin  //确定b  
        b:=b+a[e];    
        inc(e);    
      end;    
      b:=b+' ';  //便与判断  
      e:=length(b);    
      readln(a);    
      while a<>'' do begin  //如果@的人出现就输出  
        if copy(a,1,e)=b then begin    
          writeln('Successful @'+b+'attempt');    
          halt;    
        end;    
        d:=pos('@',a);    
        if (copy(a,d+1,e)<>b) and (copy(a,d+1,e)+' '<>b) or (d=0) then begin  //如果 @的不是同一个人 或 没有@人 就输出(特判'@某某某'出现在结尾且无空格的情况)  
          writeln('Unsuccessful @'+b+'attempt');    
          writeln(c);    
          writeln(copy(a,1,pos(':',a)-1));    
          halt;    
        end;    
        delete(a,d,1);  //删除'@'  
        if pos('@',a)<>0 then begin  //如果还有'@'即@了不止一个人就输出  
          writeln('Unsuccessful @'+b+'attempt');    
          writeln(c);    
          writeln(copy(a,1,pos(':',a)-1));    
          halt;    
        end;    
        readln(a);    
        inc(c);    
      end;    
      writeln('Unsuccessful @'+b+'attempt');  //队形未打破但@的人未出现,输出  
      writeln(c-1);    
      writeln('Good Queue Shape');    
    end.    
    View Code
  • 相关阅读:
    Day2 三级菜单
    python 练习之购物车
    Day1 登录接口脚本 login.py
    第十周学习进度
    浪潮之巅阅读笔记三
    浪潮之巅阅读笔记二
    浪潮之巅阅读笔记一
    第九周学习进度
    构建执法阅读笔记六
    构建之法阅读笔记五
  • 原文地址:https://www.cnblogs.com/yangqingli/p/4886929.html
Copyright © 2020-2023  润新知