Codeforces Round #735 (Div. 2) 题解
比赛地址:https://codeforces.com/contest/1554。
只有 ABCD 的题解,E 不会。
A
答案是 \(\max_i\{a_ia_{i+1}\}\)。证明:(反证)如果我们取 \(a_i,a_{i+1},a_{i+2}\) 作为答案,那么取这三个数中最大的两个数作为答案一定更优。
typedef long long ll;
const int N=3e5;
int n,a[N+10];
void mian(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",a+i);
ll ans=0;
for(int i=1;i<n;i++)
ans=std::max(ans,1LL*a[i]*a[i+1]);
printf("%lld\n",ans);
}
B
当 \(i,j\) 很大时,\(i\cdot j\) 是 \(\mathcal O(n^2)\) 级别的,而 \(k\cdot (a_i\operatorname{OR}a_j)\) 是 \(\mathcal O(100n)\) 级别的,所以只枚举后面几项即可。
typedef long long ll;
const int N=1e5;
int n,k,a[N+10];
void mian(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",a+i);
ll ans=-ll(1e18);
for(int i=std::max(1,n-140);i<=n;i++)
for(int j=i+1;j<=n;j++)
ans=std::max(ans,1LL*i*j-1LL*k*(a[i]|a[j]));
printf("%lld\n",ans);
}
C
结论:当 \(i\) 取遍 \(0\sim 2^k-1,k\in\mathbb N\) 中的所有数时,\(n\oplus i\) 的值一定是一个连续的区间。
所以我们遍历 \(m\) 在二进制下的每一位,如果第 \(i\) 位是 \(1\),那么我们就把 \(0\sim 2^i-1\) 所对应的连续区间搞出来,最后把这些区间合并即可。
代码非常难看:
void mian(){
int n,m;
scanf("%d%d",&n,&m);
std::pair<int,int> a[40];
for(int i=0;i<=35;i++)a[i].first=a[i].second=0x3f3f3f3f;
int ans=0,now=0; // now 表示只考虑第 i 位和比它高的位时 n xor m 的值
for(int i=30;i>=0;i--){
if((m>>i)&1)
a[i].first=now|(n&(1<<i)),a[i].second=now|(n&(1<<i))|(((1<<i)-1));
now|=(n&(1<<i))^(((m>>i)&1)<<i);
}
a[31].first=now,a[31].second=now;
std::sort(a,a+35);
if(a[0].first>0)puts("0");
else{
for(int i=1;i<=30;i++)
if(a[i-1].second!=a[i].first-1){
printf("%d\n",a[i-1].second+1);
break;
}
}
}
D
如果 \(n\) 是偶数,那么答案为:\(\underbrace{\texttt{aa}\cdots\texttt{a}}_{\frac n2-1\ \text{times}}\!\texttt{b}\underbrace{\texttt{aa}\cdots\texttt{a}}_{\frac n2\ \text{times}}\)。
如果 \(n\) 是奇数,那么答案为:\(\underbrace{\texttt{aa}\cdots\texttt{a}}_{\left\lfloor\frac n2\right\rfloor-1\ \text{times}}\!\!\!\texttt{bc}\underbrace{\texttt{aa}\cdots\texttt{a}}_{\left\lfloor\frac n2\right\rfloor\ \text{times}}\)。
void mian(){
int n;
scanf("%d",&n);
if(n==1)puts("a");
else if(n&1){
for(int i=1;i<=(n-2)/2;i++)
printf("a");
printf("bc");
for(int i=1;i<=(n-2)/2+1;i++)
printf("a");
puts("");
}
else{
for(int i=1;i<=(n-1)/2;i++)
printf("a");
printf("b");
for(int i=1;i<=n/2;i++)
printf("a");
puts("");
}
}
Codeforces Round #735 (Div. 2) 题解的更多相关文章
- Codeforces Round #182 (Div. 1)题解【ABCD】
Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...
- Codeforces Round #608 (Div. 2) 题解
目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...
- Codeforces Round #525 (Div. 2)题解
Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...
- Codeforces Round #528 (Div. 2)题解
Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...
- Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F
Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...
- Codeforces Round #677 (Div. 3) 题解
Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...
- Codeforces Round #665 (Div. 2) 题解
Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...
- Codeforces Round #160 (Div. 1) 题解【ABCD】
Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...
- Codeforces Round #383 (Div. 2) 题解【ABCDE】
Codeforces Round #383 (Div. 2) A. Arpa's hard exam and Mehrdad's naive cheat 题意 求1378^n mod 10 题解 直接 ...
随机推荐
- NX二次开发-通过数组创建矩阵
函数:UF_CSYS_create_matrix() 函数说明:通过数组创建矩阵. 用法: #include <uf.h> #include <uf_csys.h> exter ...
- Qt中的多线程与线程池浅析+实例
1. Qt中的多线程与线程池 今天学习了Qt中的多线程和线程池,特写这篇博客来记录一下 2. 多线程 2.1 线程类 QThread Qt 中提供了一个线程类,通过这个类就可以创建子线程了,Qt 中一 ...
- 实现一个带有动效的 React 弹窗组件
我们在写一些 UI 组件时,若不考虑动效,就很容易实现,主要就是有无的切换(类似于 Vue 中的 v-if 属性)或者可见性的切换(类似于 Vue 中的 v-show 属性). 1. 没有动效的弹窗 ...
- oracle中如何处理null
从两个表达式返回一个非 null 值.语法NVL(eExpression1, eExpression2)参数eExpression1, eExpression2如果 eExpression1 的计算结 ...
- [Azure DevOps] 如何使用任务组
1. 使用 PowerShell 脚本 在上一篇文章中我们学会了怎么使用扩展在编译前实时更改版本号.有些情况下我们希望不适用扩展,例如喜欢发明轮子,或者根本没有安装扩展的权限.这时候我们可以自己写 P ...
- R-聚类
一.定义:将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类 二.距离:欧几里得度量(euclidean metric)也称欧氏距离 绝对值距离(manhattan) ...
- JUnit5注解学习指引
注解(Annotations)是JUnit的标志性技术,本文就来对它的20个注解,以及元注解和组合注解进行学习. 20个注解 在org.junit.jupiter.api包中定义了这些注解,它们分别是 ...
- js笔记9
1.面向对象 js一开始就是写网页特效,面向过程的,作者发现这样写不好,代码重复利用率太高,计算机内存消耗太大,网页性能很差,所以作者就受到了java和c语言的影响,往面向对象靠齐.js天生有一个Ob ...
- Auto.js无障碍免root脚本开发学习
Auto.js 简单入门 官方文档:https://hyb1996.github.io/AutoJs-Docs/#/ https://blog.csdn.net/QiHsMing/article/de ...
- [HNOI2006]公路修建问题题解
题目 题目描述 OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织成立了, ...