2019牛客暑期多校训练营(第八场)B Beauty Values && C CDMA
B题题意:
给你n个数,让你把这一个序列中的所有子区间的Beauty Values加起来,Beauty Values是子区间内有几个不同的数
题解:
肯定不会是暴力,所以我们就要在各元素的位置上下手,我们可以反过来去求有多少区间内有至少一个本元素,就把这些区间加起来就可以了
但是有可能某个区间内有几个相同的元素(只是位置不同),此时在计算这个元素出现这个区间的时候只能加一次,不能多加
这样的话我们就可以在求的时候控制他们的左边界不同(我们总是控制某个元素的左边界在上一个相同元素的位置),这样就不会出现相同元素在同一个区间加多次的情况
例如:
1 2 3 1 5 6 1 9
第一个1:左边界为0,包括他的最长子区间也包括1 2 3 1 5 6 1 9,虽然这里面有多个1,但是这并不影响
第二个1:左边界为1,此时最长子区间为2 3 1 5 6 1 9,可见这样的话,虽然里面有多个1,但是区间并没有在相同元素下多加
第三个1:左边界为4,此时最长子区间为5 6 1 9
代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<math.h>
6 #include<stack>
7 #include<math.h>
8 using namespace std;
9 typedef long long ll;
10 const int maxn=1e5+10;
11 ll v[maxn];
12 int main()
13 {
14 ll n,q;
15 ll ans=0;
16 scanf("%lld",&n);
17 for(ll i=1;i<=n;++i)
18 {
19 scanf("%lld",&q);
20 ans+=(i-v[q])*(n-i+1); //这是一个计算包括q元素子区间的公式
21 v[q]=i;
22 }
23 printf("%lld\n",ans);
24 return 0;
25 }
C题题意:
输入一个n,让你找出来n*n阶方阵,他们任意两行的相同列的乘积之和为0,n只可能是2^k(k是1,2,...10)
题解:
就是2阶方阵有
1 1 那么4阶方阵就可以把2阶方阵当作一个单位A ,即:A A A = 1 1
1 -1 A -A 1 -1
具体为什么这样可以,你可以写出来任意挑选两行试试
比如四阶的第一行和第三行,前半列他们是一样的,所以就是2,但是后半列因为第三行后半列乘与一个-1,所以2就变成了-2
第一行和第四行,他们的前半列正好和2阶的一样,所以前半部分是0,后半部分乘与0*-1还是0
代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<math.h>
6 #include<stack>
7 #include<math.h>
8 using namespace std;
9 typedef long long ll;
10 const int maxn=1500;
11 int w[maxn][maxn],v[maxn][maxn];
12 int n;
13 void change(int ci,int ends)
14 {
15 if(ci==ends) return;
16 memset(v,0,sizeof(v));
17 for(int i=1;i<=n;++i)
18 {
19 for(int j=1;j<=n;++j)
20 {
21 v[i][j]=w[i][j];
22 }
23 }
24 for(int i=1;i<=n;++i)
25 {
26 for(int j=1;j<=n;++j)
27 {
28 v[i][j+n]=w[i][j];
29 }
30 }
31 for(int i=1;i<=n;++i)
32 {
33 for(int j=1;j<=n;++j)
34 {
35 v[i+n][j]=w[i][j];
36 }
37 }
38 for(int i=1;i<=n;++i)
39 {
40 for(int j=1;j<=n;++j)
41 {
42 v[i+n][j+n]=-w[i][j];
43 }
44 }
45 n*=2;
46 for(int i=1;i<=n;++i)
47 {
48 for(int j=1;j<=n;++j)
49 {
50 w[i][j]=v[i][j];
51 }
52 }
53 change(ci+1,ends);
54 }
55 void print()
56 {
57 for(int i=1;i<=n;++i)
58 {
59 for(int j=1;j<=n;++j)
60 {
61 if(j!=n)
62 printf("%d ",w[i][j]);
63 else printf("%d\n",w[i][j]);
64 }
65 }
66 }
67 int main()
68 {
69 w[1][1]=w[1][2]=w[2][1]=1;
70 w[2][2]=-1;
71 n=2;
72 int m;
73 scanf("%d",&m);
74 if(m==2)
75 print();
76 else
77 {
78 int k=0;
79 while(m!=2)
80 {
81 m/=2;
82 k++;
83 }
84 change(0,k);
85 print();
86 }
87 return 0;
88 }
2019牛客暑期多校训练营(第八场)B Beauty Values && C CDMA的更多相关文章
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 2019牛客暑期多校训练营(第二场)J-Subarray(思维)
>传送门< 前言 这题我前前后后看了三遍,每次都是把网上相关的博客和通过代码认真看了再思考,然并卵,最后终于第三遍也就是现在终于看懂了,其实懂了之后发现其实没有那么难,但是的的确确需要思维 ...
- 2019牛客暑期多校训练营(第一场)-A (单调栈)
题目链接:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意 ...
- 2019牛客暑期多校训练营(第一场)A - Equivalent Prefixes(单调栈)
题意 给定两个$n$个元素的数组$a,b$,它们的前$p$个元素构成的数组是"等价"的,求$p$的最大值."等价"的意思是在其任意一个子区间内的最小值相同. $ ...
随机推荐
- LeetCode747 至少是其他数字两倍的最大数
在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是数组中每个其他数字的两倍. 如果是,则返回最大元素的索引,否则返回-1. 示例 1: 输入: nums = [3, ...
- (二)数据源处理1-configparser读取.ini配置文件
import osimport configparsercurrent_path =os.path.dirname(__file__)#获取config当前文件路径config_file_path = ...
- Spring框架之事务源码完全解析
Spring框架之事务源码完全解析 事务的定义及特性: 事务是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务将逻辑相关的一组操作绑定在一 ...
- CTFshow萌新赛-密码学签到
查看密码信息 猜测为base家族 存在"^"符号,所以应该是在base64以上 使用base85解密 成功拿到flag
- 一文读懂 Kubernetes APIServer 原理
前言 整个Kubernetes技术体系由声明式API以及Controller构成,而kube-apiserver是Kubernetes的声明式api server,并为其它组件交互提供了桥梁.因此加深 ...
- VMware下安装Ubantu 18.04
一.VIM安装及配置 1.安装VIM sudo apt-get install vim 二.拼音输入法以及搜狗拼音输入法安装 1.安装Fcitx输入框架 sudo apt-get install fc ...
- Linux内核分析_课程学习总结报告
请您根据本课程所学内容总结梳理出一个精简的Linux系统概念模型,最大程度统摄整顿本课程及相关的知识信息,模型应该是逻辑上可以运转的.自洽的,并举例某一两个具体例子(比如读写文件.分配内存.使用I/O ...
- 基于Abp React前端的项目建立与运行——React框架分析
基于Abp React前端的项目建立与运行 目录 基于Abp React前端的项目建立与运行 1 Abp项目配置 2 运行WebApi后端项目 2.1 创建C3D数据库,并且将数据库对应链接字符串替换 ...
- day131:2RenMJ:2RenMJ游戏简介&部署MJ项目到本地
目录 1.游戏简介 1.如何做出一款麻将游戏? 2.麻将运行界面 3.麻将项目所用技术快速概览 4.web开发 / 游戏开发 / APP开发 比较 5.firefly游戏框架介绍 2.部署麻将项目到本 ...
- Linux更换软件源
1. Ubuntu16.04 sudo cp /etc/apt/sources.list /etc/apt/sources_origin.list # 备份 sudo gedit /etc/apt/s ...