366
很久没打 ABC 了,非常不习惯,居然 ABC 各 wa 一发,离谱的
A - Election 2
AtCoder 市正在举行市长选举。候选人是高桥和青木。
有
目前的计票结果是:高桥
请判断此时选举结果是否已经确定。
若当前票数已经过半则没希望了,否则有希望
void solve() {
int n, a, b;cin >> n >> a >> b;
if (a > n / 2 || b > n / 2) {
cout << "Yes\n";
} else {
cout << "No\n";
}
}
B - Vertical Writing
给你一个横向书写的文本。将其转换为竖写,用
*
填充空格。
给你
请打印
- 每个
由小写英文字母和 *
组成。 - 每个
都不以 *
结尾。 - 每个
都满足以下条件: - 对于每个
, 的 个字符存在, 的 个字符按此顺序连接等于 。 - 对于每个
, 的 -th 字符要么不存在,要么是 *
。
- 对于每个
这里,
题目意思太复杂看不懂... 意思就是要竖着写过来,且需要对齐
void solve() {
int n;cin >> n;
string s[n];
int mx = 0;
for (int i = 0;i < n;i++)cin >> s[i], mx = max(mx, (int)s[i].size());
string ans[mx];
for (int i = n - 1;i >= 0;i--) {
for (int j = 0;j < mx;j++) {
if (j < s[i].size()) {
ans[j].push_back(s[i][j]);
} else {
ans[j].push_back('*');
}
}
}
for (int i = 0;i < mx;i++) {
string ss = ans[i];
for (int i = ss.size() - 1;i >= 0;i--) {
if (ss[i] == '*')ss.pop_back();
else break;
}
cout << ss << '\n';
}
}
C - Balls and Bag Query
你有一个空袋子。给你
有三种查询。
1 x
:将一个写有整数的球放入袋子中。 2 x
: 从袋子中取出一个写有整数的球并丢弃。当给出这个查询时,可以保证袋子中有一个写着整数 的球。 3
: 打印袋中写有不同整数的球的个数。
送的,我想用 multiset 解决怎么说
void solve() {
int q;cin >> q;
map<int, int>mp;
int cnt = 0;
while (q--) {
int op;cin >> op;
if (op == 1) {
int x;cin >> x;if (!mp[x])cnt++;
mp[x]++;
} else if (op == 2) {
int x;cin >> x;if (!mp[x])cnt--;
mp[x]--;
} else {
cout << cnt << '\n';
}
}
}
D - Cuboid Sum Query
给你一个正整数
你将得到以下格式的
对于
高维前缀和/容斥原理
即求三维前缀和,顺便一提有个 SOS DP 没有补 1995(961div2)-D
为了方便书写,可以提前将
减去 1
若是使用容斥原理则可以将代码更加简化... 等我打完 div2 再说
#define int long long
int a[110][110][110];
void solve() {
int n;cin >> n;
for (int i = 1;i <= n;i++) {
for (int j = 1;j <= n;j++) {
for (int k = 1;k <= n;k++) {
cin >> a[i][j][k];
}
}
}
int q;cin >> q;
//--与下面的等价
// for (int i = 1;i <= n;i++) {
// for (int j = 1;j <= n;j++) {
// for (int k = 1;k <= n;k++) {
// b[i][j][k] =
// a[i][j][k]
// + b[i - 1][j][k] + b[i][j - 1][k] + b[i][j][k - 1]
// - b[i - 1][j - 1][k] - b[i - 1][j][k - 1] - b[i][j - 1][k - 1]
// + b[i - 1][j - 1][k - 1];
// }
// }
// }
for (int i = 1;i <= n;i++)
for (int j = 1;j <= n;j++)
for (int k = 1;k <= n;k++)
a[i][j][k] += a[i - 1][j][k];
for (int i = 1;i <= n;i++)
for (int j = 1;j <= n;j++)
for (int k = 1;k <= n;k++)
a[i][j][k] += a[i][j - 1][k];
for (int i = 1;i <= n;i++)
for (int j = 1;j <= n;j++)
for (int k = 1;k <= n;k++)
a[i][j][k] += a[i][j][k - 1];
while (q--) {
int x1, x2, y1, y2, z1, z2;cin >> x1 >> x2 >> y1 >> y2 >> z1 >> z2;
int sum = a[x2][y2][z2]
- a[x1 - 1][y2][z2]
- a[x2][y1 - 1][z2]
- a[x2][y2][z1 - 1]
+ a[x1 - 1][y1 - 1][z2]
+ a[x1 - 1][y2][z1 - 1]
+ a[x2][y1 - 1][z1 - 1]
- a[x1 - 1][y1 - 1][z1 - 1];
cout << sum << '\n';
}
}
E - Manhattan Multifocal Ellipse
给你一个二维平面上的
求
Solution
1998(965div2) 补了继续补