Решение задачи Java vs C++ с Acmp

Без пояснения   Просмотров: 1023


Сторонники языков Java и C++ часто спорят о том, какой язык лучше для решения олимпиадных задач. Одни говорят, что в Java есть масса полезных библиотек для работы со строками, хорошо реализованы механизмы чтения и вывода данных, а так же радует встроенные возможности для реализации длинной арифметики. С другой стороны, С++ является классическим языком, скорость выполнения программ благодаря существующим компиляторам (например, Intel Compiler 10.0) гораздо выше, чем у Java.

Код

#include <bits/stdc++.h>

using namespace std;

int main()
{
//    cout << int('A') << " " << int('a');
    string s;
    cin >> s;
    if(s[0] >= 'A' && s[0] <= 'Z' || s[0] == '_' || s.find("__") + 1 || s[s.size() - 1] == '_'){
        cout << "Error!";
        return 0;
    }
    if(s.find("_") + 1){
        for(int i = 0; i < s.size(); ++i){
            if(s[i] >= 'A' && s[i] <= 'Z'){
                cout << "Error!";
                return 0;
            }
        }
    }
    if(s.find("_") + 1){
        for(int i = 0; i < s.size(); ++i){
            if(s[i] == '_'){
                s[i + 1] -= 32;
                s.erase(i, 1);
                --i;
            }
        }
        cout << s;
    }
    else{
        for(int i = 0; i < s.size(); ++i){
            if(s[i] >= 'A' && s[i] <= 'Z'){
                s[i] += 32;
                s.insert(i, 1, '_');
                ++i;
            }
        }
        cout << s;
    }
    return 0;
}

         

Администратор Photo Автор: Администратор


Код

#include <iostream>
#include <cstring>
using namespace std;
const int START = 0; //start state
const int CONTINUE = 1; //common prefix identifier state
const int JAVAWORD = 2; //2-4 intermediate states
const int CPPWORD = 3;
const int CPPDEL = 4; //CPP-delimeter
const int JAVA = 5; //5-10 final states
const int CPP = 6;
const int UNIVERSAL = 7;
const int JAVAERR = 8; //Error in JAVA
const int CPPERR = 9; //Error in CPP
const int ERROR = 10;
char var[101];
char result[203] = {'\0'}; //fill the resulting string with zero code characters
int reslen = 0; //the length of the resulting string
int state;
bool is_small(char c) //supporting function
{
  return ('a'<= c && c <= 'z');
}
bool is_big(char c) //supporting function
{
  return ('A'<= c && c <= 'Z');
}
bool is_underscore(char c) //supporting function
{
  return (c == '_');
}
int selection_of_style(char * var, size_t len) //determines preliminary type of string
{
  char c=var[0];
  state = START;
  if(is_small(c))
    {
      state = CONTINUE;
    }
  if(is_big(c))
    {
      state = ERROR;
      return state;
    }
  if(is_underscore(c))
    {
      state = ERROR;
      return state;
    }
  for (int i=1; i<len; i++)
    {
      c=var[i];
      if(is_small(c)) state = state;
      if(is_big(c))
        {
          state = JAVAWORD;
          return state;
        }
      if(is_underscore(c))
        {
          state = CPPWORD;
          return state;
        }
    }
  state = UNIVERSAL;
  return state;
}
int is_java(char * var, size_t len)//check if the word is a correct java variable
{
  for (int i=0; i<len; i++)
    {
      char c = var[i];
      if(is_small(c))
        {
          state = state;
        }
      if(is_big(c))
        {
          state = state;
        }
      if(is_underscore(c))
        {
          state = JAVAERR;
          return state;
        }
    }
  if(state == JAVAWORD)
    {
      state = JAVA;
    }
  return state;
}
int is_cpp(char * var, size_t len) //check if the word is a correct cpp variable
{
  for (int i=0; i<len; i++)
    {
      char c = var[i];
      if(is_small(c))
        {
          if(state == CPPDEL)
            {
              state = CPPWORD;
            }
          else
            state = state;
        }
      if(is_big(c))
        {
          state = JAVAERR;
          return state;
        }
      if(is_underscore(c))
        {
          if(state == CPPDEL)
            {
              state = CPPERR;
              return state;
            }
          state = CPPDEL;
        }
    }
  if(state == CPPWORD)
    {
      state = CPP;
    }
  if(state == CPPDEL) //underscore in the end is an error too
    {
      state = CPPERR;
    }
  return state;
}
void java_to_cpp(char * var, size_t len) //function-translator
{
  for(int i=0; i<len; i++)
    {
      char c = var[i];
      if(is_small(c))
        {
          result[reslen++] = var[i]; //append character to resulting string
        }
      if(is_big(c))
        {
          result[reslen++] = '_';
          result[reslen++] = var[i]+32;
        }
    }
}
void cpp_to_java(char * var, size_t len) //function-translator
{
  for(int i=0; i<len; i++)
    {
      char c = var[i];
      if(is_small(c))
        {
          result[reslen++] = var[i];
        }
      if(is_underscore(c))
        {
          result[reslen++]=var[++i]-32;
        }
    }
}
int main()
{
  cin >> var;
  size_t len = strlen(var);
  state = selection_of_style(var, len);
  if(state == ERROR)
    {
      cout << "Error!" << endl;
      return 0;
    }
  if(state == JAVAWORD)
    state = is_java(var,len);
  if(state == CPPWORD)
    state = is_cpp(var,len);
  if (state == UNIVERSAL)
    {
      cout << var << endl;
      return 0;
    }
  if(state == JAVAERR)
    {
      cout << "Error!" << endl;
      return 0;
    }
  if(state == CPPERR)
    {
      cout << "Error!" << endl;
      return 0;
    }
  if(state == JAVA)
    {
      java_to_cpp(var,len);
      cout << result;
      return 0;
    }
  if(state==CPP)
    {
      cpp_to_java(var,len);
      cout << result;
      return 0;
    }
  return 0;
}

         

Администратор Photo Автор: Администратор




Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться

  1. Avatar
    1234123213
    2020-10-15 10:41:57
    #include <bits/stdc++.h>
    #pragma GCC optimize("Ofast")
    #pragma GCC optimize("Os")
    #pragma GCC optimize("O2")
    #pragma GCC optimize("O1")
    #pragma GCC target("avx,avx2,fma")
    #define pb push_back
    using namespace std;

    char nline = '\n' , tab = '\t';

    bool isCpp(const string &s)
    {
    for (auto i = 0;i < s.size();++i)
    if (isupper(s[i]))
    return 0;
    if ((s.find('_') + 1 == 1) | (s.find('_') + 1 == s.size()))
    return 0;
    for (auto i = 1;i < s.size();++i)
    if (s[i - 1] == '_' & s[i] == '_')
    return 0;
    return 1;
    }

    bool isJava(const string &s)
    {
    if (s.find('_') + 1)
    return 0;
    if (isupper(s[0]))
    return 0;
    return 1;
    }

    void fromCppToJava(string &s)
    {
    for (auto i = 0;i < s.size();++i)
    {
    if (s[i] == '_')
    {
    s[i + 1] = toupper(s[i + 1]);
    s.erase(i , 1);
    --i;
    }
    }
    cout << s;
    }

    void from_java_to_cpp(string &s)
    {
    for (auto i = 0;i < s.size();++i)
    if (isupper(s[i]))
    {
    s[i] = tolower(s[i]);
    s.insert(i , 1 , '_');
    --i;
    }
    cout << s;
    }

    int main()
    {
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
    string s;
    cin >> s;
    if (isCpp(s))
    {
    fromCppToJava(s);
    return 0;
    }
    if (isJava(s))
    {
    from_java_to_cpp(s);
    return 0;
    }
    cout << "Error!";
    return 0;
    }
  1. Avatar
    1234123213
    2020-10-15 12:28:11
    #include <bits/stdc++.h>
    #pragma GCC optimize("Ofast")
    #pragma GCC optimize("Os")
    #pragma GCC optimize("O2")
    #pragma GCC optimize("O1")
    #pragma GCC target("avx,avx2,fma")
    #define pb push_back
    using namespace std;

    char nline = '\n' , tab = '\t';

    bool isCpp(const string &s)
    {
    for (auto i = 0;i < s.size();++i)
    if (isupper(s[i]))
    return 0;
    if ((s.find('_') + 1 == 1) | (s.find('_') + 1 == s.size()))
    return 0;
    for (auto i = 1;i < s.size();++i)
    if (s[i - 1] == '_' & s[i] == '_')
    return 0;
    return 1;
    }

    bool isJava(const string &s)
    {
    if (s.find('_') + 1)
    return 0;
    if (isupper(s[0]))
    return 0;
    return 1;
    }

    void fromCppToJava(string &s)
    {
    for (auto i = 0;i < s.size();++i)
    {
    if (s[i] == '_')
    {
    s[i + 1] = toupper(s[i + 1]);
    s.erase(i , 1);
    --i;
    }
    }
    cout << s;
    }

    void from_java_to_cpp(string &s)
    {
    for (auto i = 0;i < s.size();++i)
    if (isupper(s[i]))
    {
    s[i] = tolower(s[i]);
    s.insert(i , 1 , '_');
    --i;
    }
    cout << s;
    }

    int main()
    {
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
    string s;
    cin >> s;
    if (isCpp(s))
    {
    fromCppToJava(s);
    return 0;
    }
    if (isJava(s))
    {
    from_java_to_cpp(s);
    return 0;
    }
    cout << "Error!";
    return 0;
    }