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

codeforces round 956 div2

A Array Divisibility

问题:

思路:注意到1.2.3.4.5.6....就是一组合法解

代码:

#include <bits/stdc++.h>using namespace std;void solve() {int n;cin >> n;for(int i = 1; i <= n; i ++ ) cout << i << " ";cout << endl;
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while(t -- ) {solve();}return 0;
}

B cornor twist

问题:

思路:贪心的从第一行第一列开始构造出和b一样的数组,如果构造完后a != b则没有合法解

代码:
 

#include <bits/stdc++.h>using namespace std;const int N = 510;int n, m;
char a[N][N];
char b[N][N];void solve() {int n, m;cin >> n >> m;for(int i = 1; i <= n; i ++ ) {for(int j = 1; j <= m; j ++ ) {cin >> a[i][j];                    }}for(int i = 1; i <= n; i ++ ) {for(int j = 1; j <= m; j ++ ) {cin >> b[i][j];}}for(int i = 1; i <= n - 1; i ++ ) {for(int j = 1; j <= m - 1; j ++ ) {if(a[i][j] != b[i][j]) {if(((a[i][j] + 1) % 3) == b[i][j]) {(a[i][j] += 1) %= 3;(a[i + 1][j + 1] += 1) %= 3;(a[i][j + 1] += 2) %= 3;(a[i + 1][j] += 2) %= 3;} else {(a[i][j] += 2) %= 3;(a[i + 1][j + 1] += 2) %= 3;(a[i][j + 1] += 1) %= 3;(a[i + 1][j] += 1) %= 3;}}}}bool flag = true;for(int i = 1; i <= n; i ++ ) {for(int j = 1; j <= m; j ++ ) {if(a[i][j] != b[i][j]) flag = false;}}if(flag) cout << "YES" << endl;else cout << "NO" << endl;
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while(t -- ) {solve();}return 0;
}

C have your cake eat it too

问题:

思路:就是对abc的一个排列组合,每组排列中做一下前缀和,嵌套个二分(不用二分直接暴力也行)

代码:

#include <bits/stdc++.h>using namespace std;void solve() {int n;cin >> n;vector<long long> a(n + 1), b(n + 1), c(n + 1);for(int i = 1; i <= n; i ++ ) {cin >> a[i];a[i] += a[i - 1];}for(int j = 1; j <= n; j ++ ) {cin >> b[j];b[j] += b[j - 1];}long long tot = 0;for(int k = 1; k <= n; k ++ ) {cin >> c[k];tot += c[k];c[k] +=  c[k - 1];}vector<int> ans(6);auto check = [&](vector<long long> &a, vector<long long> &b, vector<long long> &c) {int l = 1, r = n;while(l < r) {int mid = l + r >> 1;if(a[mid] >= (tot + 2) / 3) r = mid;else l = mid + 1; }if(a[l] >= (tot + 2) / 3 && l <= n - 2) {ans[0] = 1;ans[1] = l;} else return false;int tmp = l;l ++, r = n;while(l < r) {int mid = l + r >> 1;if(b[mid] - b[tmp] >= (tot + 2) / 3) r = mid;else l = mid + 1;}if(b[l] - b[tmp] >= (tot + 2) / 3 && l <= n - 1) {ans[2] = tmp + 1;ans[3] = l;} else return false;tmp = l;l ++, r = n;while(l < r) {int mid = l + r >> 1;if(c[mid] - c[tmp] >= (tot + 2) / 3) r = mid;else l = mid + 1;}if(c[l] - c[tmp] >= (tot + 2) / 3) {ans[4] = tmp + 1;ans[5] = l;} else return false;return true;};if(check(a, b, c)) {for(auto t: ans) cout << t << " ";cout << endl;return;} else if(check(a, c, b)) {cout << ans[0] << " " << ans[1] << " " << ans[4] << " " << ans[5] << " " << ans[2] << " " << ans[3] << endl;return;} else if(check(b, a, c)) {cout << ans[2] << " " << ans[3] << " " << ans[0] << " " << ans[1] << " " << ans[4] << " " << ans[5] << endl;return;} else if(check(b, c, a)) {cout << ans[2] << " " << ans[3] << " " << ans[4] << " " << ans[5] << " " << ans[0] << " " << ans[1] << endl;return;} else if(check(c, a, b)) {cout << ans[4] << " " << ans[5] << " " << ans[0] << " " << ans[1] << " " << ans[2] << " " << ans[3] << endl;return;} else if(check(c, b, a)) {cout << ans[4] << " " << ans[5] << " " << ans[2] << " " << ans[3] << " " << ans[0] << " " << ans[1] << endl;return;} else cout << "-1" << endl;
}int main() {int t;cin >> t;while(t -- ) {solve();}return 0;
}

D swap dilemma

问题:

思路:我们现在思考一个这样的问题:交换相距任意长度的元素是否都可以通过交换相邻元素实现,答案是一定的,自己模拟一下很容易就可以证明。那么现在交换相距任意距离的元素这个条件可以被我们替换成交换任意相邻元素。对于一组没有重复元素的序列,我们每一次交换相邻元素都会让该数组的逆序对数量 + 1或者 - 1也就是说,我们每一次操作都会使得ab两个数组逆序对数量的差值不变,或者减2,或者加2,如果我们可以让ab两个数组的逆序对数量相同,那么ab数组就可以相互转换,也就是如果ab逆序对数量和为偶数,数据就是合法的

这里逆序对可以用归并排序,也可以用树状数组

代码:

#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int tmp[N];long long merge_sort(vector<int> &a, int l, int r) {//最差情况下数组逆序排列此时逆序对数量等于(n + 1) * n / 2会爆intif(l >= r) return 0;int mid = l + r >> 1;long long res = merge_sort(a, l, mid) + merge_sort(a, mid + 1, r);int i = l, j = mid + 1, k = 0;while(i <= mid && j <= r) {if(a[i] <= a[j]) tmp[k ++] = a[i ++];else {tmp[k ++] = a[j ++];res += mid - i + 1;}}while(i <= mid) tmp[k ++] = a[i ++];while(j <= r) tmp[k ++] = a[j ++];for(int i = l, j = 0; i <= r; i ++, j ++ ) a[i] = tmp[j];return res;
}void solve() {memset(tmp, 0, sizeof tmp);int n;cin >> n;vector<int> a(n + 1), b(n + 1), c(n + 1), d(n + 1);for(int i = 1; i <= n; i ++ ) cin >> a[i];for(int i = 1; i <= n; i ++ ) cin >> b[i];c = a, d = b;sort(c.begin() + 1, c.end());sort(d.begin() + 1, d.end());if(c != d) {cout << "No" << endl;return;}long long cnt = 0;cnt = merge_sort(a, 1, n) + merge_sort(b, 1, n);if(cnt % 2) cout << "NO" << endl;else cout << "YES" << endl;
}int main() {int t;cin >> t;while(t -- ) {solve();}return 0;
}

E

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用 mongo2neo4j 和 SemSpect 通过各种方式进行图探索
  • 超市收银系统源码
  • 通过 Parallels Desktop 虚拟机安装运行 macOS 15 Sequoia
  • 通用后台管理(二)——项目搭建
  • go mod 依赖管理补充2
  • 手写MyBatis
  • 20W+喜爱的Pathview网页版 | 整合表达谱数据KEGG通路可视化
  • 大模型备案全网最详细流程说明【附附件】
  • SpringBootV12和mybatis全部知识点
  • pointnet2_ops_lib/.安装报错解决方案
  • 【fscan】Windows环境下的fscan安装与使用指南
  • html——VSCode的使用
  • 枚举对象序列化规则(将Java枚举转换为JSON字符串的步骤)
  • C#字符串操作:判断一个字符串是否存在于另一个字符串按特定字符分割后的子字符串中的几种方法
  • linux查看目录下的文件夹命令,find 查找某个目录,但是不包括这个目录本身?
  • Apache Pulsar 2.1 重磅发布
  • axios 和 cookie 的那些事
  • Consul Config 使用Git做版本控制的实现
  • express + mock 让前后台并行开发
  • gitlab-ci配置详解(一)
  • gulp 教程
  • Java小白进阶笔记(3)-初级面向对象
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Sass 快速入门教程
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 讲清楚之javascript作用域
  • 区块链分支循环
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 学习HTTP相关知识笔记
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (19)夹钳(用于送货)
  • (SpringBoot)第七章:SpringBoot日志文件
  • (八)Flink Join 连接
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (十三)Flink SQL
  • (译)计算距离、方位和更多经纬度之间的点
  • *Django中的Ajax 纯js的书写样式1
  • .net 7和core版 SignalR
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net 受管制代码
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ IO.File ] FileSystemWatcher
  • [000-01-018].第3节:Linux环境下ElasticSearch环境搭建
  • [18] Opencv_CUDA应用之 基于颜色的对象检测与跟踪
  • [C++]spdlog学习
  • [C++]STL之map
  • [CareerCup] 13.1 Print Last K Lines 打印最后K行
  • [IE9] IE9 Beta崩溃问题解决方案
  • [IM] [Webhook] Webhook实现IM平台机器人