yyy loves Easter_Egg I(恶心的字符串模拟)

题目背景

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

题目描述

yyy loves OI(Huntfire),yyy loves Maths(redbag),yyy loves Chemistry(absi2011)对yyy loves Physics(soha)进行轮番炸,轰炸按照顺序进行,顺序为Huntfire,redbag,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"

思路:

恶心到吐

数据还是在windows下出的

换行符是\r\n

坑死我了

按题意模拟即可

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <bitset>
#include <queue>
#include <cstdlib>
#include <algorithm>
#define rii register int i
#define rij register int j
using namespace std;
char zha[1005],name[1005],xl[1005],at[1005];
int lzha,lname,lxl;
int bnt;
int main()
{
    // freopen("k.in","r",stdin);
    char c;
    while(1)
    {
        lname=0;
        bnt++;
        lxl=0;
        int wz;
        while(~scanf("%c",&c))
        {
            if(c==10||c==13)
            {
                scanf("\n");
                break;
            }
            lxl++;
            xl[lxl]=c;
        }
        int kkk=0;
        for(rii=1;i<=lxl;i++)
        {
            if(xl[i]==‘@‘)
            {
                kkk++;
            }
        }
        if(lxl==0)
        {
            break;
        }
        for(rii=1;i<=lxl;i++)
        {
            if(xl[i]==‘:‘)
            {
                wz=i+2;
                break;
            }
            lname++;
            name[lname]=xl[i];
        }
        if(bnt!=1)
        {
            if(lzha+1==lname)
            {
                int dp=0;
                for(rii=1;i<=lzha;i++)
                {
                    if(zha[i]!=name[i])
                    {
                        dp=1;
                        break;
                    }
                }
                if(dp==0)
                {
                    cout<<"Successful @";
                    for(rii=1;i<=lname;i++)
                    {
                        putchar(name[i]);
                    }
                    cout<<"attempt";
                    return 0;
                }
            }
        }
        int lat=0,pd=0,cnt=0;
        for(rii=wz;i<=lxl;i++)
        {
            if(xl[i]==‘@‘)
            {
                pd=1;
                continue;
            }
            if((xl[i]==‘ ‘||xl[i]==13)&&pd==1)
            {
                cnt++;
            }
            if(cnt>=3)
            {
                wz=i+1;
                if(xl[i]==13)
                {
                    wz++;
                }
                break;
            }
            if(pd==1)
            {
                lat++;
                at[lat]=xl[i];
            }
        }
        if((lat!=lzha||pd==0||kkk>1)&&bnt!=1)
        {
            cout<<"Unsuccessful @";
            for(rii=1;i<=lzha;i++)
            {
                putchar(zha[i]);
            }
            putchar(‘ ‘);
            cout<<"attempt";
            puts("");
            cout<<bnt<<endl;
            for(rii=1;i<=lname;i++)
            {
                putchar(name[i]);
            }
            return 0;
        }
        if(lat==lzha&&bnt!=1)
        {
            for(rii=1;i<=lat;i++)
            {
                if(at[i]!=zha[i])
                {
                    cout<<"Unsuccessful @";
                    for(rii=1;i<=lzha;i++)
                    {
                    putchar(zha[i]);
                    }
                    putchar(‘ ‘);
                    cout<<"attempt";
                    puts("");
                    cout<<bnt<<endl;
                    for(rii=1;i<=lname-1;i++)
                    {
                        putchar(name[i]);
                    }
                    return 0;
                }
            }
        }
        if(bnt==1)
        {
            lzha=lat;
            for(rii=1;i<=lat;i++)
            {
                zha[i]=at[i];
            }
        }
    }
    // puts("kkk");
    bnt--;
    cout<<"Unsuccessful @";
    for(rii=1;i<=lzha;i++)
    {
        putchar(zha[i]);
    }
    puts(" attempt");
    cout<<bnt<<endl;
    puts("Good Queue Shape");
}

原文地址:https://www.cnblogs.com/ztz11/p/9917787.html

时间: 2024-08-07 06:28:02

yyy loves Easter_Egg I(恶心的字符串模拟)的相关文章

[洛谷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,

[洛谷P1580]yyy loves Easter_Egg I

题目大意:很多人@一个人,如果那个人忍不住说话了,就轰炸成功,如果那个人没说话或者别的人没有@他或@很多个人,则轰炸失败.(具体见原题) 解题思路:字符串处理,好好用sscanf即可(细节见代码). C++ Code: #include<cstring> #include<algorithm> #include<cstdio> char s[1050],zha[1050],shuohua[1050],At[1050]; int q=1; int main(){ fget

[P1580] yyy loves Easter_Egg I

Link: P1580 传送门 Solution: 拿来练练字符串的读入: 1.$gets()$相当于$c++$中的$getline()$,但返回值为指针!(无数据时为NULL) (都读入换行符,并将其舍弃) 2.$sscanf(起始指针,.....,......)$可以实现从另一个字符串读入 3.$strcmp$和$memcmp$都是相同时返回值为0 4.$count(begin,end,value)$能实现各个容器中的个数查找 5.$strstr(s1,s2)$能查找$s1$中第一个$s2$

uva--1368(贪心,字符串模拟)

点击打开链接 该题是一个带有贪心思想的字符串模拟题,题目给定m个长度为n的字符串,让你求一个长度为n的字符串,使得该字符串与这m个字符串对应位置的字符不同的个数和最小. 要使对应位置不同字符最少,则该字符串每个字符优先选择该位置出现次数多的字符,若次数相同则选择字典序更小的字符. 代码: #include <iostream> #include <cstdio> #include <string.h> #include <map> #include <

hdu 4119 Isabella&#39;s Message【字符串模拟】

题目链接:http://write.blog.csdn.net/postedit 自我感觉比较麻烦 #include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> #include<string> #include<map> using namespace std; const int maxh=100+10; const int maxe=100

大数运算之字符串模拟

相信大家被特别大的两个数据做运算折磨过.当两个操作数或者运算结果超过类型的表示范围后会有意想不到的错误,这时候我们的电脑还不如我们高中用过的科学计算器,这是作为一个程序员所不能忍受的.所以我们得找到其他的方式来计算.这就是我们今天要讨论的字符串模拟大数运算. 我们的运算一般使用int类型来算的,那么首先我们先复习一下各种int类型的数据表示范围: unsigned int 0-4294967295    int   -2147483648-2147483647  unsigned long 0-

从1打印到最大的n位数字(字符串模拟数字自加)

陷阱:  用最大的n位数-1(数字太大可能产生越界) 应该采用字符串模拟数字自加! 代码如下: #include<iostream> using namespace std; int  IsMax(char *number) {  int nLength = strlen(number);  int CarryBit = 0;  bool  ret = false;  for (int i = nLength-1; i >= 0; i--)  {   int nSum = number[

UVA 706 LCD Display 液晶显示屏 (字符串模拟)

[题目链接]click here~~ [题目大意] 给定的数字序列,按照要求输出对应液晶显示屏上的数字 输入: 2 12345 3 67890 0 0 输出: -- -- -- | | | | | | | | | | | | -- -- -- -- | | | | | | | | | | -- -- -- --- --- --- --- --- | | | | | | | | | | | | | | | | | | | | | | | | --- --- --- | | | | | | | |

UVA 10815-Andy&#39;s First Dictionary(字符串模拟+排序+重复删除)

Andy's First Dictionary Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description Problem B: Andy's First Dictionary Time limit: 3 seconds Andy, 8, has a dream - he wants to produce his very own dictionary. This