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;
}
posted @ 2023-03-01 23:02  harper886  阅读(38)  评论(0编辑  收藏  举报