【志银】NYOJ《题目490》翻译

2018-11-05 08:22:13来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

1.题目:翻译

1.1.题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=490

1.2.题目内容

2.解题分析

这题的输入输出格式好像描述的不太清楚,
1)可能是所有数据都完成输入,然后再输出(解法1,内存可能不够,对题意通用性高(AC通过))
2)也可能是待测试的数据输完一行就立马输出一行结果(解法2,内存能够,因为题意有歧义可能不能这样解(没通过))
两种写法都写了,最后以第一种输入输出格式通过的,还好后台数据没有内存超出的

3.解题代码

3.1.解法1(AC)

//解法1,内存可能不够,对题意通用性高(AC通过)
#include<iostream>
#include<map>
#include<cstdio>
using namespace std;
int main() {
  string s[3005], s0, s1 = "", s2 = "";
  map<string, string> f;
  f["czy"] = "cml";
  cin >> s1;
  while(s2 != "BEGIN") {
    cin >> s1 >> s2;
    f[s2] = s1;
  }
  int n = 0;
  char ch[3005];
  do {
    cin >> s[++n];
    ch[n] = getchar();
  }while(s[n] != "END");
  for(int i = 1; i < n; i++) {
    s0 = "";
    for(int j = 0; j < s[i].size(); j++) {
      if(s[i][j] >= 'a' && s[i][j] <= 'z') {
        s0 += s[i][j];
      } else {
        if(f[s0] != "") cout << f[s0];
        else cout << s0;
        cout << s[i][j];
        s0 = "";
      }
    }
    if(f[s0] != "") cout << f[s0];
    else cout << s0;
    if(ch[i] == '\n') cout << "\n";
    else cout << " ";
  }
}

3.2.解法2(WA)

//解法2,内存能够,因为题意有歧义可能不能这样解(没通过) 
#include<iostream>
#include<map>
#include<cstdio>
#include<cstring>
using namespace std;
int main() {
  string s0, s1 = "", s2 = "";
  map<string, string> f;
  f["czy"] = "cml";
  cin >> s1;
  while(1) {
    cin >> s1 >> s2;
    if(s2 == "BEGIN") break;
    f[s2] = s1;
  }
  char s[3005];
  getchar();
  while(1) {
    gets(s);
    if(s[0] == 'E' && s[1] == 'N' && s[2] == 'D') break;
    s0 = "";
    for(int i = 0; i < strlen(s); i++) {
      if(s[i] >= 'a' && s[i] <= 'z') {
        s0 += s[i];
      } else {
        if(f[s0] != "") cout << f[s0];
        else cout << s0;
        cout << s[i];
        s0 = "";
      }
    }
    cout << endl;
  }
}

创建日期:2016.09.30

更新日期:2018.11.05

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:调用当前年月日

下一篇:从题解中学算法