1.30 vp Codeforces Round #846 (Div. 2)
A - Hayato and School、
题意
给出长度为n的序列a,要求判断是否存在三个数之和为奇数,若有则输出YES且输出这三个数的下标,否则输出NO
思路
数字和为奇数的情况只有奇 + 偶, 而三个数就可以是奇奇奇,奇偶偶这两种情况。
将序列分为奇偶两个部分,然后判断是否存在这两种情况中的一种即可
void solve() {
int n;
cin >> n;
vector<int> a (n + 1);
vector<int> o, e;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
if (a[i] % 2 == 1) o.push_back(i);
else e.push_back(i);
}
if (o.size() >= 3 || e.size() >= 2 && o.size() >= 1) {
cout << "YES" << endl;
if (o.size() >= 3) {
for (int i = 0; i < 3; i ++) cout << o[i] << ' ';
cout << endl;
}else {
cout << e[0] << ' ' << e[1] << ' ' << o[0] << endl;
}
}else {
cout << "NO" << endl;
}
}
B - GCD Partition
题意
给出一个长度为n的序列,你可以将他们分为k份(k > 1),每份之和为\(b_i\)
例如:
序列:123456
分为三份
12,34,56
则b1 = 3, b2 = 7, b3 = 11
问怎么分可以使b数组所有元素的gcd最大
思路
因为k > 1,故而整个数组一定是被分为2份以上的,其中分的时候是按原数组顺序
所以我们可以想到只需要把数组分为两段即可,因为若存在倍数关系,则在两段的时候一定会出现,例如1 2 1 1 1 3,我们可以将它分为12, 111, 3三份gcd是3,但是把它分为两份12, 1113时3, 6的gcd也是3
因此对于序列的前缀和剩余部分进行gcd即可
LL gcd(LL a, LL b) {
return b ? gcd(b, a % b) : a;
}
void solve() {
int n;
cin >> n;
vector<int> a(n + 1);
LL sum = 0;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
sum += a[i];
}
LL tmp = 0, mx = 0;
for (int i = 1; i < n; i ++) {
tmp += a[i];
mx = max(mx, gcd(tmp, sum - tmp));
}
cout << mx << endl;
}
D - Bit Guessing Game
题意(交互)
你要猜题目给出的数字。
玩法:最开始的时候,会给你给出数字二进制上1的数量
然后你可以向系统输入x,然后给出的数字将减去x,再给你新的数字的二进制上1的数量
要求提问次数不超过30次,输出给出的数字
思路
看的大佬思路是lowbit,每次提问减去上次提问的lowbit + 1,然后以新的数量t和之前剩下的数量比较,看多了多少个1,将他们减掉即可,这样每次都可以消掉lowbit上的1,所以每次只会操作n次(0 < n < 30)
例如:
101100
-1
101011
-(100)2
100111
-(1000)2
11111
-(100000)2
ans即为上面减去的二进制数之和
void ask(int x) {
cout << "- " << x << endl;
}
void solve() {
int ans = 0, last = 1;
int cnt;
cin >> cnt;
while (cnt) {
ask(last);
int t;
cin >> t;
ans |= (1 << (t - cnt + 1));
last = (1 << (t - cnt + 1));
cnt --;
}
cout << "! " << ans << endl;
}
总结
思维较之前有增长,交互题可能比较简单,所以也有思路,但是没写出来
原文地址:https://www.cnblogs.com/lbzbk/p/17077049.html
- 走进科学:银行ATM机真的安全吗?
- 漏洞科普:对于XSS和CSRF你究竟了解多少
- 巧用Live Template,不仅能提升AS开发效率,还能装逼
- 黑了前男友网站:从找SQL注入到后台权限
- 扩展CakePHP的CacheHelper以使用缓存引擎
- 走进科学:酒店保险箱真的保险么?
- 利用xmlrpc.php对WordPress进行暴力破解攻击
- .Net中如何操作IIS
- Havex:以工控设备为狩猎目标的恶意软件
- 大规模异常滥用检测:基于局部敏感哈希算法——来自Uber Engineering的实践
- 浅谈php安全
- 在统一的分析平台上构建复杂的数据管道
- 隐藏在注册表的恶意软件 – Poweliks
- 数千万WordPress和Drupal站点存在DDoS风险
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 前端技术 Webpack(学习 Webpack 的原因,Webpack 快速入门)
- 每日一问第1期 | 截取字符串
- 动态规划此一篇就够了 万字总结
- 每日一问第2期 | final, finally, finalize 的区别?
- 当return遇到try、catch、finally时会发生什么?
- 五分钟C语言数据结构 之 二叉树层次遍历
- 为何IntelliJ IDEA比Eclipse好在哪里?
- 五分钟C语言数据结构 之 二叉树中序遍历
- Django 安全之跨站点请求伪造(CSRF)保护
- 五分钟C语言数据结构 之 二叉树先序遍历
- Java 语言基础(常用设计原则和设计模式,常用 Java 8~11 新特性)
- 五分钟C语言数据结构 之 二叉树后序遍历(非递归很重要)
- 5分钟Flink - 自定义Source源
- 9.深入k8s:调度器及其源码分析
- 5分钟Flink - 自定义Data Sink