当前位置: 首页 > news >正文

【CF】Day139——杂题 (绝对值变换 | 异或 + 二分 | 随机数据 + 图论)

B. Meeting on the Line

题目:

思路:

数形结合

首先考虑如果没有 t 的影响该怎么写

显然我们就是让最大时间最小化,那么显然选择最左端点和最右端点的中间值即可,即 (mi + mx) / 2,那么现在有了 t 该怎么办

我们不妨考虑拆开绝对值,由 |a - b| = max(a-b, b-a) 可得原式 t - |x - x0| 拆解为

max(t - (x - x0), t - (x0 - x)) = max(t - x + x0, t + x - x0) = max(x0 - (x - t), (t + x) - x0)

我们令 x-t 和 t+x 为两个新点,那么显然 x-t 在 x0 左边,t+x 在 x0 右边,所以我们找到最大的右端点和最小的左端点即可,这就是我们上面的普通情况

除此之外,我们可以还能使用二分or三分

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());void solve()
{int n;cin >> n;vector<int> a(n + 1), t(n + 1);for (int i = 1; i <= n; i++)cin >> a[i];for (int i = 1; i <= n; i++)cin >> t[i];int mx = -1e18, mi = 1e18;for (int i = 1; i <= n; i++){mx = max(mx, a[i] + t[i]);mi = min(mi, a[i] - t[i]);}double res = (mx + mi) * 1.0 / 2.0;printf("%.6lf\n", res);
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;cin >> t;while (t--){solve();}return 0;
}

C1. Sheikh (Easy version)

题目:

思路:

异或性质

这题看似无从下手,但是我们关键点在于发现异或的性质,不难发现一个特点,异或是不带进位的加法,那么对于任意 x,y,我们都有 x+y >= x ^ y,这是显然的

那么我们就豁然开朗了,既然 x+y >= x ^ y,那么对于一个区间我们肯定是多加数的,因为 x+y - x^y >= 0 恒成立,所以多加显然是不劣的

那么最大值显然就是选取整个区间,但是题目让我们输出最小的长度,所以考虑如何最小

显然由上诉结论可知,我们区间长度越长,那么值就越大,这是单调的,所以我们考虑二分区间长度,我们枚举每一个左端点,然后二分最大长度即可

特别注意预处理前缀和即可,还有越界问题

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());void solve()
{int n,q;cin >> n >> q;vector<int> a(n+1),sum(n+1,0),sumxor(n+1,0);for (int i = 1; i <= n; i++){cin >> a[i];sum[i] = sum[i-1] + a[i];sumxor[i] = sumxor[i-1] ^ a[i];}cin >> q >> q;int mx = sum[n] - sumxor[n];auto check = [&](int l,int len)->int{int r = min(l + len - 1,n);int nmx = (sum[r] - sum[l-1]) - (sumxor[r] ^ sumxor[l-1]);return nmx >= mx;};int le = 1e18;int mxl = 0;for (int i = 1; i <= n; i++){int l = 1,r = 1e18;while (l+1 < r){int mid = l+r >> 1;if(check(i,mid)){r = mid;}else{l = mid;}}int templen = 0;if(check(i,l)) templen = l;else templen = r;if(templen < le){le = templen;mxl = i;}}cout << mxl << " " << mxl + le - 1 << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;cin >> t;while (t--){solve();}return 0;
}

E. Guess the Cycle Size

题目:

思路:

随机数据的特征

注意到题目数据随机,那么可以考虑稍微暴力的做法

我们假设对于 a,b 点对进行询问,如果 a,b 和 b,a 的询问结果不同,那么显然二者相加就是答案

但是由于 a,b 和 b,a 的询问结果不同,因此我们要多次判断,可以发现 50 次内基本上不可能会错,如果担心错的话可以在代码结尾加上 while(1) 使得其超时,因为TLE 会重测 3 次,3 次全错肯定不可能

最后特别注意特判 -1 情况即可

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());void solve()
{int ans1, ans2;for (int i = 2; i <= 1e18; i++){cout << "? " << 1 << " " << i << endl;cin >> ans1;if (ans1 == -1){cout << "! " << i - 1 << endl;return;}cout << "? " << i << " " << 1 << endl;cin >> ans2;       if(ans1 != ans2){cout << "! " << ans1 + ans2 << endl;return;} }while (1);
}signed main()
{int t = 1;while (t--){solve();}return 0;
}


文章转载自:

http://zObv6W0S.mynbc.cn
http://FofN18fp.mynbc.cn
http://aTu0bt56.mynbc.cn
http://k84eO7TW.mynbc.cn
http://ptGUhE1b.mynbc.cn
http://KIqJCE2f.mynbc.cn
http://Qdunv1mT.mynbc.cn
http://fNwvn7Q9.mynbc.cn
http://LekpaFnA.mynbc.cn
http://DJQXU1yF.mynbc.cn
http://qnYGAB01.mynbc.cn
http://cdwi2VbD.mynbc.cn
http://s9XbSxVT.mynbc.cn
http://u5RlHeh4.mynbc.cn
http://hsTEJAM9.mynbc.cn
http://GBzHkfnk.mynbc.cn
http://MIUNpCBH.mynbc.cn
http://rOHOjp5L.mynbc.cn
http://aE1YdqGi.mynbc.cn
http://ZIbMzdVe.mynbc.cn
http://MbcjC3c6.mynbc.cn
http://VH9Zl3wX.mynbc.cn
http://IepE4RT8.mynbc.cn
http://iBqoBL1P.mynbc.cn
http://4NbYqlsk.mynbc.cn
http://gMCcN7NL.mynbc.cn
http://qAtDg5g3.mynbc.cn
http://nEUW9v1R.mynbc.cn
http://RLJeNwUB.mynbc.cn
http://pALILf38.mynbc.cn
http://www.dtcms.com/a/370232.html

相关文章:

  • ElementUI之Upload 上传的使用
  • 在线教育系统源码选型指南:功能、性能与扩展性的全面对比
  • Web漏洞挖掘篇(二)—信息收集
  • 从零开始的python学习——文件
  • ThreadLocal 深度解析:原理、应用场景与最佳实践
  • Error metrics for skewed datasets|倾斜数据集的误差指标
  • 前端错误监控:如何用 Sentry 捕获 JavaScript 异常并定位源头?
  • 9.6 前缀和
  • 快捷:常见ocr学术数据集预处理版本汇总(适配mmocr)
  • Linux系统检测硬盘失败解救方法
  • 内网后渗透攻击--linux系统(横向移动)
  • 【软考架构】第二章 计算机系统基础知识:计算机网络
  • equals 定义不一致导致list contains错误
  • Qt编程之信号与槽
  • uv教程 虚拟环境
  • 残差网络 迁移学习对食物分类案例的改进
  • VBA之Excel应用第四章第七节:单元格区域的整行或整列扩展
  • 【Flask】测试平台开发,数据看板开发-第二十一篇
  • [光学原理与应用-433]:晶体光学 - 晶体光学是研究光在单晶体中传播规律及其伴随现象的分支学科,聚焦于各向异性光学媒质的光学特性
  • C++面试10——构造函数、拷贝构造函数和赋值运算符
  • PID控制技术深度剖析:从基础原理到高级应用(六)
  • 登录优化(双JWT+Redis)
  • 【基础-单选】在下面哪个文件中可以设置页面的路径配置信息?
  • C++ 内存模型:用生活中的例子理解并发编程
  • 【3D图像算法技术】如何在Blender中对复杂物体进行有效减面?
  • 电脑音频录制 | 系统麦克混录 / 系统声卡直录 | 方法汇总 / 常见问题
  • 论文阅读:VGGT Visual Geometry Grounded Transformer
  • 用 PHP 玩向量数据库:一个从小说网站开始的小尝试
  • [光学原理与应用-432]:非线性光学 - 既然光也是电磁波,为什么不能直接通过电生成特定频率的光波?
  • python调用mysql