C. C. Blog

Security Research, Algorithm and Data Structure

PTA团体程序设计天梯赛题目集 L1-064 估值一亿的AI核心代码 (20分)

去年比赛的时候虽然对了,但写的好麻烦,以至于后面不敢再写这道题,今天又写了一遍,贴出来做纪念。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define io_opt ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
int n;
bool isbiaodian(char x){
return !(x>='0'&&x<='9'||x>='a'&&x<='z'||x>='A'&&x<='Z'||x==' ');
}
bool iswall(char x){
return !(x>='0'&&x<='9'||x>='a'&&x<='z'||x>='A'&&x<='Z');
}
void del32(vector<char> &v){
while(!v.empty()&&*v.begin()==' ') v.erase(v.begin());
while(!v.empty()&&*(v.end()-1)==' ') v.erase(v.end()-1);
for(int i=0;i<v.size();i++){
if(v[i]!=' ') continue;
while(i+1<v.size()&&v[i+1]==' ') v.erase(v.begin()+i+1);
}
for(int i=0;i<v.size();i++){
if(v[i]!=' ') continue;
if(i+1<v.size()&&isbiaodian(v[i+1])) v.erase(v.begin()+i);
}

}
void smallwen(vector<char> &v){
for(int i=0;i<v.size();i++){
if(v[i]=='?') v[i]='!';
if(v[i]>='A'&&v[i]<='Z'&&v[i]!='I'){
v[i]+='a'-'A';
}
}
}
void you2i(vector<char> &v){
string s="can you",t="\1 can";
for(int i=0;i<v.size();i++){
if(v[i]!=s[0]||(i-1>=0&&!iswall(v[i-1]))||i+s.size()-1>=v.size()||(i+s.size()<v.size()&&!iswall(v[i+s.size()]))) continue;
bool fg=true;
for(int j=0;j<s.size();j++){
if(v[i+j]!=s[j]){
fg=false;
break;
}
}
if(!fg) continue;
for(int j=1;j<=s.size();j++) v.erase(v.begin()+i);
for(int j=t.size()-1;j>=0;j--) v.insert(v.begin()+i,t[j]);
}
s="could you",t="\1 could";
for(int i=0;i<v.size();i++){
if(v[i]!=s[0]||(i-1>=0&&!iswall(v[i-1]))||i+s.size()-1>=v.size()||(i+s.size()<v.size()&&!iswall(v[i+s.size()]))) continue;
bool fg=true;
for(int j=0;j<s.size()&&i+j<v.size();j++){
if(v[i+j]!=s[j]){
fg=false;
break;
}
}
if(!fg) continue;
for(int j=1;j<=s.size();j++) v.erase(v.begin()+i);
for(int j=t.size()-1;j>=0;j--) v.insert(v.begin()+i,t[j]);
}
}
void i2you(vector<char> &v){
string s="I",t="you";
for(int i=0;i<v.size();i++){
if(v[i]!=s[0]||(i-1>=0&&!iswall(v[i-1]))||i+s.size()-1>=v.size()||(i+s.size()<v.size()&&!iswall(v[i+s.size()]))) continue;
bool fg=true;
for(int j=0;j<s.size();j++){
if(v[i+j]!=s[j]){
fg=false;
break;
}
}
if(!fg) continue;
for(int j=1;j<=s.size();j++) v.erase(v.begin()+i);
for(int j=t.size()-1;j>=0;j--) v.insert(v.begin()+i,t[j]);
}
s="me",t="you";
for(int i=0;i<v.size();i++){
if(v[i]!=s[0]||(i-1>=0&&!iswall(v[i-1]))||i+s.size()-1>=v.size()||(i+s.size()<v.size()&&!iswall(v[i+s.size()]))) continue;
bool fg=true;
for(int j=0;j<s.size()&&i+j<v.size();j++){
if(v[i+j]!=s[j]){
fg=false;
break;
}
}
if(!fg) continue;
for(int j=1;j<=s.size();j++) v.erase(v.begin()+i);
for(int j=t.size()-1;j>=0;j--) v.insert(v.begin()+i,t[j]);
}
}
void i2I(vector<char> &v){
for(int i=0;i<v.size();i++){
if(v[i]=='\1') v[i]='I';
}
}
void solve(string &s){
vector<char>v;
for(int i=0;i<s.size();i++){
v.push_back(s[i]);
}
del32(v);
smallwen(v);
you2i(v);
i2you(v);
i2I(v);
cout<<"AI: ";
for(int i=0;i<v.size();i++){
cout<<v[i];
}
cout<<endl;
}
string s[20];
int main(){
io_opt;
/*vector<int>v;
for(int i=0;i<5;i++)
v.push_back(i);
v.insert(v.begin()+1,10);
for(int &i:v) cout<<i<<endl;*/
cin>>n;
getline(cin,s[0]);
for(int i=1;i<=n;i++){
getline(cin,s[i]);
cout<<s[i]<<endl;
solve(s[i]);
}
return 0;
}
  • 本文作者: CCWUCMCTS
  • 本文链接: https://ccwucmcts.github.io/posts/33790/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!