9月13日模拟赛
前言
A. [2019.10长郡集训day12]古代龙人的谜题
题目
思路
把这个 \(01\) 序列称为序列 \(a\) 。那么可以观察到,答案的贡献来源于两个部分:
-
对于合法区间 \([a_i,a_j]\) , \(a_i,a_j\) 为 \(1\) 。称其为基本的区间。
-
由基本区间向外扩展得到的区间。
-
两面包夹芝士,由一堆 \(0\) 包围的 \(1\)
三种情况如图:
对于以上三种情况,处理出每个 \(1\) 到前一个 \(1\) 中间有多少个 \(0\) (记做 \(L\)) ,再处理出每个 \(1\) 到后一个 \(1\) 中间有多少个 \(0\) (记做 \(R\)),就可以解决 情况三 。在解决 情况一 的基础上就可以解决 情况二 。
根据乘法原理(\(n,m\)的意义如图):
情况三的贡献为: \(n\times m\)
情况二的贡献为:\((n+1)\times (m+1)\)
现在考虑怎么解决情况一,只考虑左右端点皆为 \(1\) 的情况:
假设序列 \(a\) (黑色部分)如下:
把所有的 \(1\) 按照从左到右的顺序排号,对于 \(a_i\) 称它的序号为 \(k_i\) 。(红色部分)
有一条显而易见的结论是一个合法的区间中,\(1\) 的个数是奇数。
假设有一个合法区间 \([a_i,a_j]\) 那么,\(k_i\) 和 \(k_j\) 的奇偶性是相同的。
对于这一点,预处理出每个 \(a_i=1\) 的 \(R_i\) ,求出两个值:
和
这两个值的作用马上揭晓。
对于序列 \(a\) 中的每个 \(1\) ,尝试计算(它作为左端点的贡献(情况一二) \(+\) 它在情况三下的贡献)
于是有(假设这个数为 \(a_i\), \(VAL_{i,j}\) 表示区间\([a_i,a_j]\) 的贡献 ):
那么他的总贡献为:
code
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+105;
int opt,n,cnt1,a[N],r[N],q0,q1,ans;
inline int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
inline int spread(){
int x=0;char ch=getchar();
while(!isdigit(ch)){ch=getchar();}
if(isdigit(ch))x=ch-'0';
return x;
}
signed main(){
opt=read();
if(opt>=0){
n=read();
for(int i=1;i<=n;i++)a[i]=spread(),cnt1+=a[i];
int k=cnt1;
for(int i=n,j=0;i>=1;i--){j++;if(a[i]==1){r[k--]=j;j=0;}}
for(int i=1;i<=cnt1;i++){if(i%2==0) q0+=r[i];else q1+=r[i];}
k=1;
for(int i=1,j=0;i<=n;i++){
j++;
if(a[i]==1)
if(k%2==0)
{ans+=(j-1)*(r[k]-1)+j*(q0-r[k]);q0-=r[k];k++;j=0;}
else
{ans+=(j-1)*(r[k]-1)+j*(q1-r[k]);q1-=r[k];k++;j=0;}
}
printf("%lld",ans);
}
return 0;
}
我讲得真的很清楚,真的……
B. [2019.10长郡集训day17]石头剪刀布
题目
思路
code
C. [2019.10长郡集训day17]投票
题目
思路
code
D. [2019.10长郡集训day21]小学组
题目
思路
code
原文地址:https://www.cnblogs.com/Nickle/p/15262338.html
- SpringBoot常用配置
- Json格式String类型字符串转为Map工具类
- spring boot thymeleaf常用方式
- Java工具类- 跨域工具类
- python语言中的AOP利器:装饰器
- 如何使用supervisor管理你的应用
- Manjaro安装配置
- [Golang软件推荐] Frp内网穿透
- [Golang软件推荐] Golang通用连接池
- RxJS -- Subscription
- ASP.Net Core项目在Mac上使用Entity Framework Core 2.0进行迁移可能会遇到的一个问题.
- RxJS速成 (下)
- RxJS速成 (上)
- Typescript 查缺补漏
- 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 数组属性和方法
- Android自定义网络连接工具类HttpUtil
- Android Studio时间选择器的创建方法
- Android 拦截返回键事件的实例详解
- Android自定义可点击的ImageSpan并在TextView中内置View
- Android开发实现带清空按钮的EditText示例
- Android用于校验集合参数的小封装示例
- TextView中URL等指定特殊字符串与点击事件解析
- Android开发实现仿京东商品搜索选项卡弹窗功能
- Android开发中button按钮的使用及动态添加组件方法示例
- Kotlin开发的一些实用小技巧总结
- Android使用URLConnection提交请求的实现
- android原生JSON解析实例
- iOS新闻类App内容页技术探索
- Android仿iphone自定义滚动选择器
- Android仿iPhone日期时间选择器详解