日常训练2025-1-18

日常训练2025-1-18

D1. Turtle and a MEX Problem (Easy Version)

rating:1500

https://codeforces.com/problemset/problem/2003/D1

思路(Trick)

每一个数组会有两个mex,第一个是没有意义的,因为做一次操作得到第一个mex后补到数组中就能得到更大的mex了,这样能让x更大,所以对于每个数组,我们只需要维护第二个mex。

然后我们发现,不需要维护每一个数组的第二个mex,因为如果有一个最大的mex存在,这个mex属于数组 b ,那么我们一定是去b数组做两次操作让x最大,所以其他数组的第二个mex就没有意义了。

最后做一个计数即可。

代码

#include <bits/stdc++.h>
typedef std::pair<long long, long long> pll;
typedef std::pair<int, int> pii;
#define INF 0x3f3f3f3f
#define MOD 998244353
using i64 = long long;
const int N = 1e5+5;
void solve(){
int n, m;
std::cin >> n >> m;
std::vector<int> L(n);
std::vector a(n, std::set<int>());
for (int i = 0; i < n; i++){
int l; std::cin >> l;
L[i] = l;
for (int j = 0; j < l; j++){
int x; std::cin >> x;
a[i].insert(x);
}
}
int f1 = 0, f2 = 0;
for (int i = 0; i < n; i++){
int k = 1;
int j = 0;
while (true){
if (a[i].count(j)){
j++;
}else if (k == 1){
j++;
k--;
}else if (k == 0){
f2 = std::max(j, f2);
break;
}
}
}
// std::cerr<< f2 << '\n';
i64 ans = 0;
if (m < f2){
ans += f2*(m+1);
}else if (m == f2){
ans += 1LL * f2 * (f2+1);
}else{
ans += 1LL * f2 * (f2+1);
ans += 1LL * (m - f2) * (f2+1 + m) / 2;
}
std::cout << ans << '\n';
}
signed main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout<<std::setiosflags(std::ios::fixed)<<std::setprecision(2);
int t = 1, i;
std::cin >> t;
for (i = 0; i < t; i++){
solve();
}
return 0;
}

G1. Ruler (easy version)

rating:1500

https://codeforces.com/problemset/problem/1999/G1

思路(二分答案)

比较明显的一道二分答案法

代码

#include <bits/stdc++.h>
typedef std::pair<long long, long long> pll;
typedef std::pair<int, int> pii;
#define INF 0x3f3f3f3f
#define MOD 998244353
using i64 = long long;
const int N = 1e5+5;
void solve(){
auto ask = [&](int x, int y) ->int{
std::cout << "? " << x << ' ' << y << std::endl;
fflush(stdout);
int ret; std::cin >> ret;
return ret;
};
int l = 2, r = 999;
while (l < r){
int mid = (l + r) / 2;
if (ask(1, mid) == mid + 1){
r = mid;
}else{
l = mid + 1;
}
}
std::cout << "! " << r << std::endl;
fflush(stdout);
}
signed main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout<<std::setiosflags(std::ios::fixed)<<std::setprecision(2);
int t = 1, i;
std::cin >> t;
for (i = 0; i < t; i++){
solve();
}
return 0;
}

本文作者:califeee

本文链接:https://www.cnblogs.com/califeee/p/18678144

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   califeee  阅读(2)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.