Educational Codeforces Round 144 (Rated for Div. 2)
链接
Educational Codeforces Round 144 (Rated for Div. 2)
只会两个题太弱了
A题
先打表找出一个很长的字符字串然后,用strstr查找找到yes找不到no
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cstring>
#include <unordered_set>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <sstream>
#include <queue>
#define int long long
#define yes cout<<"YES"<<'\n'
#define no cout<<"NO"<<'\n'
using namespace std;
const int N = 2 * 100000;
const int ll_MAX = -9223372036854775807; //定义最小值
signed main () {
ios::sync_with_stdio(false);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
string s;
cin >> s;
//判断是不是这一串的字串(就随机去了很长的一段)反正k小于10
if (strstr("FBFFBFFBFBFFBFFBFBFFBFFBFBFFBFFBFBFFBFFBFBFFBFFBFBFFBFFBFBFFBFFBFBFFBFFBFBFFBFFBFBFFBFFBFBFFBFFBFBFFBFFBFBFFBFFBFBFFBFFB", s.c_str()) != NULL) {
yes;
} else {
no;
}
}
string s;
// for(int i=1;i<=100000;i++){//打表代码
// if(i%3==0&&i%5!=0){
// s=s+'F';
// }
// if(i%5==0&&i%3!=0){
// s=s+'B';
// }
// if(i%5==0&&i%3==0){
// s=s+"FB";
// }
// }
// cout<<s;
return 0;
}
B题
这个题也是一个思维题,先判断这连个支付串的第一个字符和最后一个相同吗,如果最后一个或者第一个相同就可以直接得出答案(记住答案中*的数量雄小于等于字母的数量)
如果不满足第一种情况的话,枚举短的字符串的全部字符去判断是不是另一个字符串的字串,如果枚举出来的最大的字符串长度大于等于2就直接打印答案
两种情况都不满足打印-1
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cstring>
#include <unordered_set>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <sstream>
#include <queue>
#define int long long
#define yes cout<<"YES"<<'\n'
#define no cout<<"NO"<<'\n'
using namespace std;
const int N = 2 * 100000;
const int ll_MAX = -9223372036854775807; //定义最小值
signed main () {
ios::sync_with_stdio(false);
int t;
cin >> t;
while (t--) {
string s1, s2;
cin >> s1 >> s2;
if (s1[0] == s2[0]) { //第一个字符相同
yes;
string res;
res = res + s1[0];
res = res + '*';
cout << res << '\n';
continue;
}
if (s1[s1.size() - 1] == s2[s2.size() - 1]) { //最后一个字符相同
yes;
string res;
res = res + '*';
res = res + s1[s1.size() - 1];
cout << res << '\n';
continue;
}
//下面是第二种情况
if (s1.size() > s2.size()) { //让s1是比较短的那个
swap(s1, s2);
}
int mmax = -99999999;
string s3;
// s1=s1.substr(1,s1.size()-2);
// s2=s2.substr(1,s2.size()-2);
for (int i = 0; i < (int)s1.size(); i++) {
for (int j = 1; j <= (int)s1.size() - i; j++) {
string temp = s1.substr(i, j); //枚举s1的全部字串
if (strstr(s2.c_str(), temp.c_str()) != NULL && j > mmax) { //如果s2的字串的话并且长度大于最大值
mmax = j;
s3 = temp; //更新数据
}
}
}
if (mmax <= 1) { //最大值小于等于1打印no
no;
} else { //否则构造字符串打印出来
string res = "*";
res = res + s3;
res = res + "*";
yes;
cout << res << '\n';
}
}
return 0;
}