今天的CF真的自闭。
1379 A. Acacius and String
题意:给定一个字符串,含有小写字母和?。可以把?替换成任意小写字母,要判断字符串中’abcba’这个字串是否有且只有出现过一次。
思路:暴力查找,先判断原本字符串中’abcba’出现的次数,如果大于1次,则输出no。如果等于一次就输出‘yes’。否则就对字符串进行修改。再判断
#include<bits/stdc++.h>
using namespace std;
long long l, r, m;
bool check(long long n) {
if (n >= l && n <= r)return true;
else return false;
}
string s = "abacaba";
int find(string str) {
int i, j;
int cnt = 0;
for (i = 0; i <= str.size()-7; i++) {
int flag = 1;
for (j = 0; j < 7; j++) {
if (s[j] != str[i + j]) {
flag = 0;
break;
}
}
if (flag)
cnt++;
}
return cnt;
}
int main() {
ios::sync_with_stdio(false);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
string str;
cin >> str;
int cnt = find(str);
int i, j;
if (cnt > 1) {
cout << "No" << endl;
continue;
}
if (cnt == 1) {
cout << "Yes" << endl;
for (i = 0; i < str.size(); i++) {
if (str[i] != '?')cout << str[i];
else cout << 'z';
}
cout << endl;
continue;
}
string tmp = str;
int flag1 = 1;
for (i = 0; i <= str.size()-7; i++) {
int flag = 1;
str = tmp;
for (j = 0; j < 7; j++) {
if ( str[i + j] == '?') str[i + j] = s[j];
if ( str[i + j] != s[j])flag = 0;
}
if (flag) {
cnt = find(str);
if (cnt == 1) {
flag1 = 0;
cout << "Yes" << endl;
for (i = 0; i < str.size(); i++) {
if (str[i] != '?')cout << str[i];
else cout << 'z';
}
cout << endl;
}
if (flag1 == 0)break;
}
}
if (flag1) {
cout << "No" << endl;
}
}
return 0;
}
1379 B. Dubious Cyrpto
题意:有三个整数a,b,c。满足l<=a,b,c<=r 还有一个整数m=n*a+b-c。n是严格大于0的正整数。题面给定l,r,m。要求出a,b,c的值
思路:枚举a。当m%a或者a-m%a <=r-l时。则可以求出a,b,c的值。m%a或者a-m%a相当与b-c的值。具体如下图所示。又因为n只能是大于等于1的正整数。所以判断的时候,应该先判断a-m%a的情况。因为这种情况下n一定是大于等于1的。
#include<bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
int t;
cin >> t;
while (t--) {
long long l, r, m;
cin >> l >> r >> m;
long long tmp = m / l;
long long a, b, c;
long long i, j;
c = l;
for (i = l; i <= r; i++) {
a = i;
long long det1 = m % a;
long long det2 = a - m % a;
if (det2 <= r - l) {
b = l;
c = l + det2;
break;
}
else if (det1 <= r - l) {
c = l;
b = l + det1;
break;
}
}
cout << a << ' ' << b << ' ' << c << endl;
}
return 0;
}