Codeforces Round #657 (Div. 2)【一个题没出!!!!】

A. Acacius and String

题意:?可以修改成任意字符,判断这个串中是不是只含一个字串"abacaba"。
思路: 当时自己纠结点是:那个?改了之后万一出来两个了怎么办,串不就变了吗等等
其实每次就是挨着判断就行了,你改完就在去循环一次啊,反正不怕麻烦!!!!!首先就是 第一个for循环,你每次取7个字符,然后 开始下一个for循环,在第二个for循环就是判断这7个是不是那个串,遇到?不要着急改。
遍历结束如果这个满足那个串,你就再用一个for循环 判断后边还有没有,这个时候?就改成d,这样不影响,如果就出现一次直接输出就行,否则继续判断,就这样。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <stack>
#include <algorithm>
#include <iomanip>
#include <map>
#include <queue>
#include <vector>
#include <set>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
string cmp = "abacaba";
int main()
{
	
	int t; cin >> t;
	while (t--)
	{
		int m; cin >> m;
		string s; cin >> s;
		int ass = 0, flag = 0;
		for (int i = 0; i < m - 6; i++)
		{
			flag = 0;
			string t = s.substr(i, 7);
			for (int j = 0;j<7;j++)
			{
				if (t[j] == '?')
					continue;
				if (t[j] != cmp[j])
				{
					flag = 1; break;
				}
			}  
			if (!flag)
			{
				string s1 = s;
				for (int j = 0; j < 7; j++)
				{
					s1[i + j] = cmp[j];
				}
				for (int j = 0; j < m; j++)
				{
					if (s1[j] == '?')
						s1[j] = 'd';
				}
				int ans = 0;
				for (int j = 0; j < m - 6; j++)
				{
					t = s1.substr(j, 7);
					if (t == cmp)
						ans++;
				}
				if (ans == 1)
				{
					cout << "YES" << endl;
					cout << s1 << endl;
					ass = 1; break;
				}
			}
		}
		if (!ass)
			cout << "NO" << endl;
	}
}

B题
在这里插入图片描述在这里插入图片描述

题意:有三个整数a,b,c。满足l<=a,b,c<=r 还有一个整数m=n*a+b-c。n是严格大于0的正整数。题面给定l,r,m。要求出a,b,c的值

思路:既然n是任意的正整数,那么我们直接枚举a的情况,再来判断b-c的情况。
1先在 l 到 r 的范围枚举a,那么这个时候的b-c有俩种情况
就是n*a 或者 (n+1)*a,但是这里有个坑,就是n必须大于0,所以我们就得先判断(n+1)*a,因为这种情况一定是大于0的。
2那么我们a可以枚举,我们怎么判断b和c呢?
就只用保证,枚举的a去模上m的余数在 r - l 的范围内就可以了,因为b - c的范围就是 r - l 以内

原文链接:https://blog.csdn.net/moasad/article/details/107451672

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <stack>
#include <algorithm>
#include <iomanip>
#include <map>
#include <queue>
#include <vector>
#include <set>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
string cmp = "abacaba";
int main()
{
	
	int t; cin >> t;
	while (t--)
	{
		ll l, r, m, a, b, c; cin >> l >> r >> m;
		for (ll i = l; i <= r; i++)
		{
			a = i;
			if (a - m % a <= r - l)//b-c
			{
				c = r;
				b = r-(a-m % a);
			}
			else
			{
				b = r;
				c = r - m % a;
			}
			if (b <= r && b >= l && c <= r && c >= l)
				break;
		}
		cout << a << " " << b << " " << c << endl;
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值