Practice.
A. Cowardly Rooks
题意
给定
思路
我们可以先将原来的所有点对应的横坐标和纵坐标对应的行和列进行统计,之后若能找出任意一行或者任意一列没有点,那么就可以移动到那里去。
时间复杂度:
对应AC代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
const int N = 5e3 + 10, inf = 0x3f3f3f3f3f3f, mod = 998244353;
signed main() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int q;
cin >> q;
while(q --){
int n, m;
cin >> n >> m;
int r[10]{}, c[10]{};
bool f = false;
for(int i=0;i<m;i++) {
int a, b;
cin >> a >> b;
r[a]++, c[b]++;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(r[i] == 0 || c[j] == 0){
f = true;
}
}
cout << (f ? "YES\n" : "NO\n");
}
}
给的代码写得略微麻烦了点(
B. Death’s Blessing
题意
给定
思路
首先,答案可以拆分成原来所有怪物的血量和加上外加的血量,外加的血量只和操作顺序有关,所以我们可以试试贪心:
既然两侧的怪物能附加的血量只会影响到一个怪物,那么我们可以贪心地从两侧开始打,但这不够,考虑到只剩一个怪物的时候,这个怪物无法再将自己的能力附加到其他怪物上,所以我们可以将能力值最大的怪物放到最后。
可以很容易证明上述贪心思想成立。
时间复杂度:
对应AC代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
const int N = 5e3 + 10, inf = 0x3f3f3f3f3f3f, mod = 998244353;
signed main() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int q;
cin >> q;
while(q --){
int n;
cin >> n;
int ans = 0;
for(int i=0;i<n;i++) {
int cur;
cin >> cur;
ans += cur;
}
vector<int> b(n);
for(int i=0;i<n;i++){
int cur;
cin >> cur;
b[i] = cur;
ans += b[i];
}
sort(b.begin(), b.end());
cout << ans - b[n - 1] << '\n';
}
}
简单的贪心捏
C. Number Game
题意
给定一个数组
思路
显然,既然要让
考虑到数据范围特别小,我们不妨在每一局结束的时候将整个新数组排个序。
对于一个回合,我们可以用二分的方法,快速找出第一个大于
数据量太小了,可以二分答案
时间复杂度:
对应AC代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
const int N = 2e5 + 10, inf = 0x3f3f3f3f3f3f, mod = 998244353;
signed main() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int q;
cin >> q;
while(q --){
int n;
cin >> n;
vector<int> a(n);
for(int i=0;i<n;i++) cin >> a[i];
for(int k=n;k>=0;k--){
vector<int> tmp(a);
sort(tmp.begin(), tmp.end());
bool f = true;
for(int i=1;i<=k;i++){
int p = upper_bound(tmp.begin(), tmp.end(), k - i + 1) - tmp.begin();
if(p == 0) {
f = false;
break;
}
tmp[p - 1] = inf;
tmp[0] += k - i + 1;
sort(tmp.begin(), tmp.end());
}
if(f){
cout << k << '\n';
break;
}
}
}
}
无脑暴力.jpg
- 本文链接 https://floating-ocean.github.io/blog_old/posts/482042403/
- 版权声明 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!