• Codeforces Gym 100286I iSharp 水题


    Problem I. iSharp
    Time Limit: 20 Sec

    Memory Limit: 256 MB

    题目连接

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=86821#problem/I

    Description

    You are developing a new fashionable language that is not quite unlike C, C++, and Java. Since your language should become an object of art and fashion, you call it i # (spelled i-sharp). This name combines all the modern naming trends and also hints at how smart you are. Your language caters for a wide auditory of programmers and its type system includes arrays (denoted with “[]”), references (denoted with “&”), and pointers (denoted with “*”). Those type constructors can be freely combined in any order, so that a pointer to an array of references of references of integers (denoted with “int&&[]*”) is a valid type. Multiple variables in i # can be declared on a single line with a very convenient syntax where common type of variables is given first, followed by a list of variables, each optionally followed by additional variable-specific type constructors. For example, the following line: int& a*[]&, b, c*; declares variables a, b, and c with types “int&&[]*”, “int&”, and “int&*” correspondingly. Note, that type constructors on the right-hand sides of variables in i # bind to variable and their order is reversed when they are moved to the left-hand side next to type. Thus “int*& a” is equivalent to “int a&*”. However, you discover that coding style with multiple variable declarations per line is confusing and is outlawed in many corporate coding standards. You decide to get rid of it and refactor all existing i # code to a single variable declaration per line and always specify type constructor next to the type it refers to (instead of the right-hand side of variable). Your task it to write such refactoring too

    Input

    The input file contains a single line with a declaration of multiple variables in i #. The line starts with a type name, followed by zero, one, or more type constructors, followed by a space, followed by one or more variable descriptors separated by “,” (comma) and space, and terminated by “;” (semicolon). Each variable descriptor contains variable name, followed by zero, one, or more type constructors. Type name and variable names are distinct and consist of lowercase and uppercase English letters from “a” to “z” or “A” to “Z”. The line contains at most 120 characters and does not contain any extra spaces.

    Output

    Write to the output file a line for each variable declared in the input file. For each variable write its declaration on a single line in the same format as in the input file, but with all type constructors next to its type. Separate type with all type constructors from a variable name by a single space. Do not write any extra spaces.

    Sample Input

    int& a*[]&, b, c*; 

    Sample Output

    int&&[]* a;
    int& b;
    int&* c;

    HINT

    题意

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <vector>
    #include <stack>
    #include <map>
    #include <set>
    #include <queue>
    #include <iomanip>
    #include <string>
    #include <ctime>
    #include <list>
    typedef unsigned char byte;
    #define pb push_back
    #define input_fast std::ios::sync_with_stdio(false);std::cin.tie(0)
    #define local freopen("in.txt","r",stdin)
    #define pi acos(-1)
    
    using namespace std;
    string str;
    string sb;
    string temp;
    string name;
    string sign;
    int a1 = 0 , a2 = 0 , a3 = 0;
    
    void GetName()
    {
        name.clear();sign.clear();
        for(int i = 0 ; i < temp.size() ; ++ i)
        {
            if ( (temp[i] <= 'Z' && temp[i] >= 'A' ) || (temp[i] <= 'z' && temp[i] >= 'a') )
            {
                name.pb(temp[i]);
            }
            else
            sign.pb(temp[i]);
        }
        reverse(sign.begin(),sign.end());
        for(int i = 0 ; i < sign.size() ; ++ i)
        {
            if (sign[i] == '[') sign[i] = ']';
            else if(sign[i] == ']') sign[i] = '[';
        }
    }
    
    
    int main(int argc,char *argv[])
    {
      freopen("isharp.in","r",stdin);
      freopen("isharp.out","w",stdout);
      getline(cin,str);
      int bg;
      for(int i = 0 ; i< str.size() ; ++ i)
      {
           if (str[i] == ' ')
           {
               sb = str.substr(0,i);
               bg = i;
               break;
           }
      }
      int pre = bg;
      for(int i = bg ; i < str.size() ; ++ i)
      {
           if (str[i] == ',' || str[i] == ';')
           {
               temp.clear();
               temp = str.substr(pre+1,i-pre-1);
               GetName();
               cout << sb << sign << " "<< name << ';'<<endl;
               i ++;
               pre = i;
           }
      }
      return 0;
    }

    题,然后倒着输出字符就好了

    题解

    模拟一下就好了

    代码:

  • 相关阅读:
    启动Nginx、查看nginx进程、nginx帮助命令、Nginx平滑重启、Nginx服务器的升级
    专为渗透测试人员设计的 Python 工具大合集
    如何为网站启用HTTPS加密传输协议
    正确设置nginx/php-fpm/apache权限 提高网站安全性 防止被挂木马
    java中十进制转换为任意进制
    多线程死锁的产生以及如何避免死锁
    Java Integer和String内存存储
    Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
    Jvm垃圾回收器详细
    分布式环境中的负载均衡策略
  • 原文地址:https://www.cnblogs.com/qscqesze/p/4713819.html
Copyright © 2020-2023  润新知