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;
}
posted @ 2020-10-27 00:39  CCWUCMCTS  阅读(123)  评论(0编辑  收藏  举报