文章目录
AtCoder Regular Contest 108
A - Sum and Product
题意: 给两个正整数 S, P,问是否存在正整数 N 和 M,满足 N+M=S 和 N*M=P。
题解: 枚举P的因此,然后判断因子相加是否为S即可。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
int const MAXN = 2e5 + 10;
int n, m, T;
int main() {
LL s, p;
cin >> s >> p;
for (LL i = 1; i <= p / i; ++i) {
// 枚举到sqrtx(x)
if (p % i == 0) {
// 如果能够整除
if (i + p / i == s) {
cout << "Yes\n";
return 0;
}
}
}
cout << "No\n";
return 0;
}
B - Abbreviate Fox
题意: 给一个长度 N 和对应长度的字符串 S,snuke 可以执行以下操作任意次:删除子字符串 fox。问最后字符串 s 的长度是多少。
题解: 使用栈来维护即可,一旦发现fox,删除栈顶的fox
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
int const MAXN = 2e5 + 10;
int n, m, T;
char s[MAXN];
int main() {
cin >> n;
getchar();
int top = 0;
for (int i = 1; i <= n; ++i) {
char c;
scanf("%c", &c);
s[top++] = c;
if (i < 3 || top < 3)
continue;
if (s[top - 1] == 'x' && s[top - 2] == 'o' && s[top - 3] == 'f')
top -