zoukankan      html  css  js  c++  java
  • URAL 1993 This cheeseburger you don't need

    http://acm.timus.ru/problem.aspx?space=1&num=1993

    题意:题目中那么多英语直接就没看,看了样例知道是什么意思了,就是给你一个字符串,算是一个句子,若是复杂句,是有“ ,”作为分割为两个句子的,若是不加任何括号的就原样输出,若是有括号的先输出花括号里的,再输出中括号里的,再输出小括号里的,每一句话只有第一个字母大写。

    思路 :模拟题吧,一向挺烦的,万一哪个细节没注意到就容易出错。

    #include<cstdio>
    #include<cstring>
    #define maxn 1000
    using namespace std;
    char s[maxn],s1[maxn];
    int a[maxn],b[maxn];
    int main()
    {
        while(gets(s))
        {
            int m,t;
            int k=strlen(s);
            bool flag=false;
            for(int i=0; i<k; i++)
            {
                if(s[i]=='{'||s[i]=='('||s[i]=='[')
                {
                    s[i+1]+=32;
                    break;
                }
            }
            for(int i=0; i<k; i++)
            {
                if(s[i]==',')
                {
                    flag=true;
                    m=i;
                    break;
                }
            }
            if(!flag)
            {
                for(int i=0; i<k; i++)
                {
                    if(s[i]=='{') a[1]=i;
                    else if(s[i]=='(') a[2]=i;
                    else if(s[i]=='[') a[3]=i;
                    else if(s[i]=='}') b[1]=i;
                    else if(s[i]==')') b[2]=i;
                    else if(s[i]==']') b[3]=i;
                }
                t=1;
                while(t<=3)
                {
                    for(int j=a[t]+1; j<b[t]; j++)
                    {
                        if(t==1&&j==a[t]+1)
                        printf("%c",s[j]-32);
                        else printf("%c",s[j]);
                    }
                    if(t!=3) printf(" ");
                    t++;
                }
                printf("
    ");
            }
            else if(flag)
            {
                for(int i=0; i<m; i++)
                {
                    if(s[i]=='{') a[1]=i;
                    else if(s[i]=='(') a[2]=i;
                    else if(s[i]=='[') a[3]=i;
                    else if(s[i]=='}') b[1]=i;
                    else if(s[i]==')') b[2]=i;
                    else if(s[i]==']') b[3]=i;
                }
                t=1;
                while(t<=3)
                {
                    for(int j=a[t]+1; j<b[t]; j++)
                    {
                        if(t==1&&(j==a[t]+1))
                        printf("%c",s[j]-32);
                        else printf("%c",s[j]);
                    }
                    if(t!=3) printf(" ");
                    t++;
                }
                int cc;
                for(int j=m; j<k; j++)
                {
                    if(s[j]=='{'||s[j]=='('||s[j]=='[')
                    {
                        cc=j;
                        break;
                    }
                    else printf("%c",s[j]);
                }
                for(int i=cc; i<k; i++)
                {
                    if(s[i]=='{') a[1]=i;
                    else if(s[i]=='(') a[2]=i;
                    else if(s[i]=='[') a[3]=i;
                    else if(s[i]=='}') b[1]=i;
                    else if(s[i]==')') b[2]=i;
                    else if(s[i]==']') b[3]=i;
                }
                t=1;
                while(t<=3)
                {
                    for(int j=a[t]+1; j<b[t]; j++)
                    {
                        printf("%c",s[j]);
                    }
                    if(t!=3) printf(" ");
                    t++;
                }
                printf("
    ");
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    140704
    140703
    140702
    堆排序
    并查集
    140701
    这年暑假集训-140630
    vim for python
    hihocode 第九十二周 数论一·Miller-Rabin质数测试
    hdu 3157 Crazy Circuits 有源汇和下界的最小费用流
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3451684.html
Copyright © 2011-2022 走看看