zoukankan      html  css  js  c++  java
  • 宁波理工邀请赛 c zoj3185解题报告

    C - List Operations
    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu
    Submit  Status

    Description

    A list is a sequence of zero or more elements, expressed in this form: [a1, a2, a3, ... , an], where each ai is one or more consecutive digits or lowercase letters. i.e. each list begins with a left square bracket, then zero or more elements separated by a single comma, followed by a right square bracket. There will be no whitespace characters (spaces, TABs etc) within a list.

    In this problem, we use two list operations: append (++) and remove (--).

    1. A ++ B: append elements in B to the end of A.

    2. A -- B: remove all the elements in B, from A. If something appears more than once in B, remove it that many times in A. If there are many equal elements in A to choose from, remove them from left to right (until all occurrences are removed, or there is no need to remove more elements).

    Your task is to write a calculator, evaluating simple expressions or the form "list1 ++ list2" or "list1 -- list2".

    Input

    There will be at most 10 expressions, one in each line, each having the form "list1 ++ list2" or "list1 -- list2", with no more than 80 characters in total (not counting the newline character). There will be exactly two spaces in each line: one before and one after the operator. Input ends with a single dot. The input is guaranteed to satisfy the restrictions stated above.

    Output

    For each expression, print its result on a single line.

    Sample Input

    [1,2,3] ++ [1,2,3]
    [a,b,c,t,d,e,t,x,y,t] -- [t]
    [a,b,c,t,d,e,t,x,y,t] -- [t,t,t,t]
    [123] ++ [456]
    .
    

    Sample Output

    [1,2,3,1,2,3]
    [a,b,c,d,e,t,x,y,t]
    [a,b,c,d,e,x,y]
    [123,456]
    水题,字符串的处理,容易出错!
    #include <iostream>
    #include <stdio.h>
    #include <string>
    #include<list>
    
    using namespace std;
    
    int main()
    {
        list<string > q1,q2;
        list<string>::iterator ptr1,ptr2;
        char c;
        string str;
        int flag,temp,j;
        while(scanf("%c",&c)!=EOF)
        {
              if(c=='.')
                break;
              q1.clear();
              q2.clear();
              while((c=getchar())!=EOF)
              {
    
                    if(c==']')
                      break;
                      str="";
                      str+=c;
                      while((c=getchar())!=',')
                      {
                            if(c==']')
                                  break;
                            str+=c;
                      }
    
                    q1.push_back(str);
                    if(c==']')
                            break;
    
              }
              getchar();
              if((c=getchar())=='+')
                flag=1;
              else
                flag=0;
              getchar();
              getchar();
              getchar();
             while((c=getchar())!=EOF)
              {
    
                    if(c==']')
                      break;
    
                      str="";
                      str+=c;
                      while((c=getchar())!=',')
                      { if(c==']')
                                  break;
                         str+=c;
    
                      }
    
                    q2.push_back(str);
                   if(c==']')
                            break;
    
              }
              getchar();
             
              if(flag)
              {
                   printf("[");
                   temp=0;
                  for(ptr1=q1.begin(),j=1;ptr1!=q1.end();ptr1++,j++)
                  {
                      if(j!=q1.size())
                      {
                          cout<<*ptr1<<",";
                          temp=1;
                      }
    
                      else
                      {
                            cout<<*ptr1;
                            temp=1;
                      }
    
                  }
    
                   for(ptr1=q2.begin(),j=1;ptr1!=q2.end();ptr1++,j++)
                  {
    
    
                      cout<<","<<*ptr1;//这里要特别注意,错了几次
    
                  }
    
                  printf("]\n");
              }
              else
              {
    
                    for(ptr1=q2.begin();ptr1!=q2.end();ptr1++)
                    {
    
                          for(ptr2=q1.begin();ptr2!=q1.end();ptr2++)
                          {
                                if(*ptr1==*ptr2)
                                {
                                      *ptr2="A";
                                     break;
                                }
                          }
    
    
                    }
                    temp=0;
                    for(ptr2=q1.end(),ptr2--,j=q1.size();j>=0;ptr2--,j--)
                    {
                          if(*ptr2!="A")
                             {
                                temp=j;
                                break;
                             }
                    }
                     
                    cout<<"[";
    
                    for(ptr1=q1.begin(),j=1;ptr1!=q1.end();ptr1++,j++)
                    {
    
                          if((*ptr1!="A")&&(j!=temp))
                            cout<<*ptr1<<",";
                            else if((*ptr1!="A"))
                                  cout<<*ptr1;
    
    
                    }
    
                    printf("]\n");
              }
    
    
        }
    
        return 0;
    }
    


  • 相关阅读:
    dinoql 试用
    dinoql 使用graphql 语法查询javascript objects
    使用git_stats 统计分析git 仓库代码&& 集成webhook
    使用gitstats分析git 仓库代码
    PostGraphile 4.4 发布,支持real time 查询
    cube.js 学习(十)cube 来自官方的学习网站
    Optimize Cube.js Performance with Pre-Aggregations
    cube.js 学习(九)cube 的pre-aggregation
    cube.js 学习(八)backend部署模式
    cube.js 学习(七)cube.js type 以及format 说明
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3131029.html
Copyright © 2011-2022 走看看