PTA团体程序设计天梯赛题目集 L1-064 估值一亿的AI核心代码 (20分)
去年比赛的时候虽然对了,但写的好麻烦,以至于后面不敢再写这道题,今天又写了一遍,贴出来做纪念。
#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;
}