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;
}
}