PTA天梯赛训练题L1-064:估值一亿的AI核心代码(字符串模拟)
Update:smz说regex秒过Orz,yzd记在这里了。
听说今年天梯赛有个烦人的模拟,我便被队友逼着试做一下……一发15,二发20.记一记,要不然枉费我写这么久……
自己还是代码能力太菜了,校内大佬依旧随手A过去,你吉老师该AK还是AK……
调调改改的,很丑,懒得优化写法了。
大概思路就是先把最好改的改了:大小写、标点、空格。空格你只要判断它后面是不是字母就行了,不是字母就把它删了。
上面是改了也没啥影响的,然后我的方法是先把can you这种东西找到(免得你把I和me改成you结果出锅),删了you,在can的位置标记,这样输出时多输出个I。
然后再把me和I的位置找到,标记上(不直接改是因为会影响上一个改动的相对位置),然后输出时改为输出you。
口胡起来很简单,实现起来……并不推荐这么写。真正写的时候因为是动态的所以会有很多细节,所以这个方法并不好。
const int maxn = 1e3 + ;
int T;
string s, ans;
queue<int> Q;
queue<P> q; void deal(string s) {
for (int i = ; i < s.length(); ++i) {
if (isalpha(s[i]) && s[i] <= 'Z' && s[i] >= 'A' && s[i] != 'I') s[i] = s[i] - 'A' + 'a';
if (s[i] == '?') s[i] = '!';
}
while (s[] == ' ') s.erase(, );
while (s[s.length() - ] == ' ') s.erase(s.length() - , ); string t = "", tmp = "", last = "";
for (int i = ; i < s.length(); ++i) {
if (i < s.length() - && s[i] == ' ' && !isdigit(s[i + ]) && !isalpha(s[i + ])) {
continue;
}
t += s[i];
}
s = t; t = "", tmp = "", last = "";
int lastpos = -, pos = -;
for (int i = ; i < s.length(); ++i) {
if (isalpha(s[i])) {
t += s[i];
} else {
if (t == "you" && (last == "can" || last == "could") && s[pos] == ' ') {
Q.push(lastpos - * Q.size());
tmp.erase(tmp.length() - , );
} else {
tmp += t;
}
last = t;
pos = i;
lastpos = i - t.length() - ;
t = "";
tmp += s[i];
}
}
if (t != "") {
if (t == "you" && (last == "can" || last == "could") && s[pos] == ' ') {
Q.push(lastpos - * Q.size());
tmp.erase(tmp.length() - , );
} else {
tmp += t;
}
} t = "", ans = "";
for (int i = ; i < tmp.length(); ++i) {
if (isalpha(tmp[i])) {
t += tmp[i];
} else {
if (t == "I" || t == "me") {
q.push(P(i - t.length(), t.length()));
}
ans += t;
ans += tmp[i];
t = "";
}
}
if (t != "") {
if (t == "I" || t == "me") {
q.push(P(tmp.length() - t.length(), t.length()));
}
ans += t;
}
} int main() {
for (scanf("%d", &T), getchar(); T; T--) {
while (!Q.empty()) Q.pop();
getline(cin, s);
cout << s << endl;
deal(s);
cout << "AI: ";
if (Q.size() && Q.front() == -) cout << "I ", Q.pop();
for (int i = ; i < ans.length(); ++i) {
if (q.size() && q.front().first == i) {
cout << "you";
i += q.front().second - ;
q.pop();
continue;
}
cout << ans[i];
if (Q.size() && Q.front() == i) {
cout << "I ";
Q.pop();
}
}
cout << endl;
} return ;
}
PTA天梯赛训练题L1-064:估值一亿的AI核心代码(字符串模拟)的更多相关文章
- PTA --- 天梯赛 L1-064 估值一亿的AI核心代码
L1-064 估值一亿的AI核心代码 (20 point(s)) 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: 消除原文中多 ...
- L1-064 估值一亿的AI核心代码 (20 分)
L1-064 估值一亿的AI核心代码 (20 分) 以上图片来自新浪微博. 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: ...
- PTA 估值一亿的AI核心代码
题面 比赛时被模拟题打自闭了,本来以为是个比较麻烦的模拟,实际上只要会C++的regex不到40行就能把这个题过掉了(orz smz) regex是用来处理正则表达式,里面有个函数regex_repl ...
- L1-064 估值一亿的AI核心代码
以上图片来自新浪微博. 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来: 消除原文中多余空格:把相邻单词间的多个空格换成 1 个 ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 021-024
忙疯警告,这两天可能进度很慢,下午打了一下午训练赛,训练赛的题我就不拿过来的,pta就做了一点点,明天又是满课的一天,所以进度很慢啦~ -------------------------------- ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 001-006
应师兄要求,在打三月底天梯赛之前要把PTA上面的练习集刷完,所以后面的时间就献给PTA啦~ 后面每天刷的题都会把答案代码贡献出来,如果有好的思路想法也会分享一下~ 欢迎大佬提供更好的高效率算法鸭~ - ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 052-053
今日刷题,水题水题 ------------------------------------------------L1-052------------------------------------ ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 048-49
今日刷题048-049 ------------------------------------------------L1-048---------------------------------- ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 040-41
近期安排 校赛3.23天梯赛3.30华工校赛 4.21省赛 5.12 ------------------------------------------------L1-040----------- ...
随机推荐
- 嵌入式开发之davinci---8148/8127/8168 中dsp c674的浮点和定点兼容
c674: 是c67(浮点)+c64(定点) 兼容的 http://processors.wiki.ti.com/index.php/-mv_option_to_use_with_the_C674x ...
- js之substr和substring的差别
今天有人在群里问这两个的差别,借这个机会在这罗列下 substring(from,to) 開始和结束的位置,从零開始的索引 參数 描写叙述 from 必需. 一个非负的整数,规定要提取 ...
- python 爬虫1 開始,先拿新浪微博開始
刚刚開始学. 目的地是两个.一个微博,一个贴吧 存入的话,临时还没想那么多.先存到本地目录吧 分词和推荐后面在整合 mysql mongodb hadoop redius 后面在用 我最终知道为什么大 ...
- gradle in action 笔记
原网址 https://lippiouyang.gitbooks.io/gradle-in-action-cn/content/
- 解决pyspark-linux-windowsIDE JAVA_HOME not set
对 os.environ 赋值 ssh://root@192.168.2.51:22/usr/bin/python -u /home/data/tmp_test/trunk/personas/tmp_ ...
- NEU 1685: All Pair Shortest Path
题目描述 Bobo has a directed graph G with n vertex labeled by 1,2,3,..n. Let D(i,j) be the number of edg ...
- HDU1520 Anniversary party —— 树形DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java ...
- flywaydb and sql server
https://flywaydb.org/documentation/database/sqlserver How Flyway works https://flywaydb.org/getstart ...
- mysql 5.5升级到5.7版本操作流程
一.备份原来 phpStudy 中 MySQL 安装目录 二.把下载的 MySQL 压缩文件解压至 phpStudy 下的 MySQL目录,复制 my-default.ini ,重命名为 my.ini ...
- codeforces 667D D. World Tour(最短路)
题目链接: D. World Tour time limit per test 5 seconds memory limit per test 512 megabytes input standard ...