9月13日模拟赛

时间:2021-09-13
本文章向大家介绍9月13日模拟赛,主要包括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\) ,求出两个值:

\[q_0= \sum ^{i} R_i \; (1\leq i\leq n,k_i \mod 2=0,a_i=1) \]

\[q_1= \sum ^{i} R_i \; (1\leq i\leq n,k_i \mod 2=1,a_i=1) \]

这两个值的作用马上揭晓。

对于序列 \(a\) 中的每个 \(1\) ,尝试计算(它作为左端点的贡献(情况一二) \(+\) 它在情况三下的贡献)

于是有(假设这个数为 \(a_i\), \(VAL_{i,j}\) 表示区间\([a_i,a_j]\) 的贡献 ):

\[VAL_{i,j}=(L_i+1)\times(R_j+1)+(L_i\times R_i) \]

那么他的总贡献为:

\[ \]

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