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$的最大值."等价"的意思是在其任意一个子区间内的最小值相同. $ ...
随机推荐
- 【SpringBoot1.x】RestfulCRUD
SpringBoot1.x RestfulCRUD 文章源码 添加资源 将所有的静态资源都添加到 src/main/resources/static 文件夹下,所有的模版资源都添加到 src/main ...
- (二)数据源处理1-configparser读取.ini配置文件
import osimport configparsercurrent_path =os.path.dirname(__file__)#获取config当前文件路径config_file_path = ...
- 解决ROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'creat table study_record( id int(11) not null
之前一直用的好好的,突然就出现了这个错误: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual tha ...
- oracle 12C单实例打PSU
前提: oracle不管打什么样的补丁,readme都是很好的参考资料. Oracle每季度都会更新一个最新的PSU,现在12.1.0.2.0的最新的PSU是Patch 26925311. 由于今天白 ...
- Junit测试和反射
Junit单元测试 测试分类 黑盒测试:不需要写代码,给输入值,看程序能否得到输出期望值. 白盒测试:需要些代码,关注程序具体的执行流程. Junit的使用 步骤 定义一个测试类(测试用例). 定义测 ...
- Nginx架构赏析
淘宝的某位大佬曾经做过测试,在一台24G内存的机器上,Nginx的最大并发连接数达到了200万.同学们听到这个结论后,是不是被Nginx的超高性能深深折服了,它内部的架构设计究竟是怎么样的呢?这篇文章 ...
- Python 日志打印之自定义logger handler
日志打印之自定义logger handler By:授客 QQ:1033553122 #实践环境 WIN 10 Python 3.6.5 #实践代码 handler.py #!/usr/bin/env ...
- MySQL如何加锁控制并发
目录 前言 一.乐观锁 添加version字段 二.悲观锁 读锁 全表锁(LOCK TABLE 表 READ) 行锁(SELECT ... LOCK IN SHARE MODE) 写锁 全表锁(LOC ...
- Netty之JAVA BIO模型
一.JAVA BIO模型 1.I/O模型 I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能 Java 共支持 3 种网络编程模型/IO 模式:BIO.NI ...
- 13 | 实战:单机如何实现管理百万主机的心跳服务? https://time.geekbang.org/column/article/240656
13 | 实战:单机如何实现管理百万主机的心跳服务? https://time.geekbang.org/column/article/240656