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

Codeforces Round 930 (Div. 2)

在这里插入图片描述

Codeforces Round 930 (Div. 2)

Codeforces Round 930 (Div. 2)

A. Shuffle Party

题意:

给出长度为n的整数数组a, a i a_i ai= i,对于k>=2的下标进行运算,设d为k除本身外最大的除数,

操作为交换( a k a_k ak, a d a_d ad),从小到大交换操作后数组元素1的位置。

思路:

从前往后元素1下标的移动:1->2->4->…->x

最终x为小于n的最大二次幂。

AC code:

void solve() {cin >> n;for (int i = 32; i >= 0; i --) {if (pow(2, i) <= n) {cout << (int)pow(2, i) << endl;return;}}
}

B. Binary Path

题意:

略,这构造。。。

思路:

  • 首先是找到最小字典序的路径字符串,保证长度最短则有且只能换行一次,只有第一次遇到对角线右上大于左下的时候进行换行,可以同时保证路径长度最短和字典序最小。
  • 然后对于相同的最佳路径,从换行的列开始向前找,遇到对角线相等则相同路线+1,否则结束寻找。

​ 可以通过画二叉树路径来模拟可能的结果。

  • 注意不需要提前进行换行的情况。

AC code:

void solve() {cin >> n;for (int i = 0; i < 2; i ++) {string s; cin >> s;for (int j = 0; j < n; j ++) {a[i][j] = s[j];}}int ans = 1;string s = "";int x = 0, y = 0, pos = n - 1;for (int i = 1; i < n; i ++) {s += a[0][i - 1];if (a[0][i] > a[1][i - 1]) {pos = i - 1;break;}}if (pos == n - 1) {s += a[0][n - 1];s += a[1][n - 1];for (int i = pos; i >= 0; i --) {if ((a[0][i] == a[1][i - 1])) ans += 1;else break;}}else {for (int i = pos; i < n; i ++) s += a[1][i];for (int i = pos; i >= 0; i --) {if ((a[0][i] == a[1][i - 1])) ans += 1;else break;}}cout << s << endl;cout << ans << endl;
}

C. Bitwise Operation Wizard

题意:

难得补交互。。。

现在有一组长度为n的p隐藏序列,为0到n-1的排列组合,我们的目的是找到两个索引使 p i p_i pi^ p j p_j pj最大化。

我们可以进行的询问为:选择任意a, b, c, d四个下标元素进行查询;

每次查询可以得到一个字符:表示(pa | pb) 与 (pc | pd) 的大小关系。

最多可以进行3*n次询问,在有限次数内找出最大异或对的两个下标。

思路:

  • 首先进行(n - 1)次查询,每次选择的四个下标,a=b, c=d,则可以判断两个元素的大小关系,遍历完所有元素则可以找到最大元素的下标mx;
  • 然后考虑如何通过询问,得到异或最大元素:
    • 对每个p元素进行询问,通过查询与mx进行或运算,找出可以通过与mx进行或运算所能得最大元素的下标;
    • 注意,查询可能出现重复的或运算结果,此时再进行比较大小的查询选择较小的元素。

AC code:

void solve() {cin >> n;int mx = 0;for (int i = 1; i < n; i ++) {cout << '?' << " " << mx << " " << mx << " " << i << " " << i << endl;cout.flush();char pos; cin >> pos;if (pos == '<') mx = i;}if (n == 2) {cout << "! 0 1" << endl;cout.flush();return;}int mn = 0;for (int i = 1; i < n; i ++) {cout << '?' << " " << mx << " " << mn << " " << mx << " " << i << endl;cout.flush();char pos; cin >> pos;if (pos == '<') mn = i;if (pos == '=') {cout << '?' << " " << mn << " " << mn << " " << i << " " << i << endl;cout.flush();char pos1; cin >> pos1;if (pos1 == '>') mn = i;}}cout << '!' << " " << mx << " " << mn << endl;cout.flush();
}
http://www.lryc.cn/news/308382.html

相关文章:

  • c语言求平方与倒数序列的部分和
  • Vue-4
  • 【Acwing】差分矩阵
  • Linux系统加固:如何有效管理系统账号
  • 在Windows中安装PyTorch
  • 助力智能化农田作物除草,基于YOLOv7【tiny/l/x】不同系列参数模型开发构建农田作物场景下玉米苗、杂草检测识别分析系统
  • linux nasm汇编中调用printf不报错,但调用scanf报错。抛出了分段错误(核心转储)
  • Linux系统——Nginx负载均衡模式
  • 【自然语言处理之语言模型】讲解
  • 输入一个整数n,输出这个整数的二进制的0和1的个数
  • 初阶数据结构:链表相关题目练习(补充)
  • java: 错误: 不支持发行版本 5
  • springSecruity--->和springboot结合的跨域问题
  • 网关kong记录接口处理请求和响应插件 tcp-log-with-body的安装
  • ElasticSearch之Completion Suggester
  • ant 布局组件 组件等高设置
  • 不可多得的干货,网易的朋友给我这份339页的Android面经
  • Qt项目:网络1
  • 软件测试有哪些常用的测试方法?
  • 【C语言基础】:深入理解指针(一)
  • 单点故障解决方案之Smart Link与Monitor Link
  • QT之QSharedMemory共享内存
  • string 类 经典习题之数字字符相加
  • 通讯录——C语言实现
  • 优思学院|3步骤计算出Cpk|学习Minitab
  • 【Java编程进阶之路 06】深入探索:JDK、JRE与JVM的关系与差异
  • Linux中的touch命令
  • 智能驾驶规划控制理论学习-基于采样的规划方法
  • 二叉树——二叉树所有路径
  • 算法训练营day38(补),动态规划6