【uoj121】 NOI2013—向量内积】的更多相关文章

本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description 两个d 维向量A=[a1,a2,...,ad]与B=[b1,b2,...,bd]的内积为其相对应维度的权值的乘积和,即: 现有 n 个d 维向量x1,...,xn ,小喵喵想知道是否存在两个向量的内积为k的倍数.请帮助她解决这个问题…
[fake题解][NOI2013]向量内积 做法1 大暴力.哪里不会T哪里. 做法2 所有数都%=k不影响结果.(废话 k的取值只有2和3,所以肯定是要分类讨论的.k=2肯定简单些啦. k=2 出现的数只会有0和1 两个0或1相乘,乘积就是与之后的值 所以可以把向量用bitset存起来,这样计算就是\(O(\frac{d}{32})\),结果是3.125 然后上暴力,\(O(\frac{n^2}{2}\times 3.125)\),能卡过(事实并非如此,飞起了) k=3 先讨论前14个点的k=3…
来自FallDream的博客,未经允许,请勿转载,谢谢. 两个d 维向量A=[a1,a2,...,ad]与B=[b1,b2,...,bd]的内积为其相对应维度的权值的乘积和,即: $\sum_{i=1}^{d}ai*bi$ 现有 n 个d 维向量x1,...,xn ,小喵喵想知道是否存在两个向量的内积为k的倍数.请帮助她解决这个问题 k=2时 n<=20000 d<=100  k=3时n<=1000,d<=100 或者n<=100000 d<=30 把两个向量内积看作矩…
传送门 发现这个内积和矩乘有点像,考虑构造一个 $n$ 行 $m$ 列的矩阵 $A$,每一行都是一个题目给定的 $m$ 维向量 设 $B=AA^T$ ,其中 $A^T$ 为 $A$ 的转置矩阵,那么对于 $B_{i,j}$ 的值,它其实就是向量 $i$ 和向量 $j$ 的内积 注意到 $K$ 只有 $2$ 或 $3$,先考虑 $K=2$ 时的情况 此时就是问矩阵 $B$ 在模 $2$ 意义下是否有位置的值为 $0$ ,并且求出位置 首先判断是否有 $0$ ,因为此时 $B$ 的元素不是 $0$…
传送门 挺有意思的一道题 暴力60就是枚举每个向量暴力check,随机选向量就能多骗一些分 然后两个向量内积要模\(k\)为\(0\),那么如果全部不为\(0\)就不合法.先考虑\(k=2\),对于向量\(i\),假如前面所有向量和他的内积为\(1\),那么所有内积之和应该要和\(i-1\)模\(2\)同余,所以如果某个\(i\)不满足这个条件,就可以\(O(nd)\)的找出前面和他内积为\(0\)的向量.而内积之和可以看成当前向量和前面所有向量之和的内积,所以维护好前面向量的和,每次前缀和的当…
http://uoj.ac/problem/121 (题目链接) 题意 给出${n}$个${d}$维向量,问是否有两个不同的向量的内积是${k}$的倍数. Solution 又卡了一上午常数,我弃了T_T. 右转题解→_→:llg 代码 // uoj121 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #inc…
Description 两个d 维向量A=[a1,a2,...,ad]与B=[b1,b2,...,bd]的内积为其相对应维度的权值的乘积和,即: 现有 n 个d 维向量x1,...,xn ,小喵喵想知道是否存在两个向量的内积为k的倍数.请帮助她解决这个问题Input 第一行包含3个正整数n,d,k,分别表示向量的个数,维数以及待检测的倍数.接下来n行每行有d个非负整数,其中第i行的第j个整数表示向量xi的第j维权值xi,j.Output 包含两个整数,用空格隔开.如果存在两个向量xp,xq的内积…
Description 两个d 维向量A=[a1,a2,...,ad]与B=[b1,b2,...,bd]的内积为其相对应维度的权值的乘积和,即: 现有 n 个d 维向量x1,...,xn ,小喵喵想知道是否存在两个向量的内积为k的倍数.请帮助她解决这个问题 Solution 首先做一个转换:如果把 \(B=A*A^T\) 构造出来,那么 \(B[i][j]\) 就代表向量 \(i\) 和向量 \(j\) 的内积,如果为 \(\mod k=0\) 则满足要求 \(A^T\) 是转置矩阵,也就是把原…
考虑奇技淫巧. 首先是k=2.对向量维护一个前缀和,每次将当前向量与前缀和点乘.如果点乘结果不等于i-1&1,说明当前向量至少和之前的某个向量的数量积是2的倍数,暴力找就可以了.当然等于i-1&1也不一定就不存在,这本质上还是个随机算法,于是先random_shuffle一下. k=3时,注意到12≡22≡1(mod 3),于是维护一个平方前缀和.具体的化一下式子就可以得出. 调了半天才发现bzoj题面上的数据范围锅了. #include<iostream> #include&…
题目链接 BZOJ3243 题解 模数只有\(2\)或\(3\),可以大力讨论 如果模数为\(2\),乘积结果只有\(1\)或\(0\) 如果一个向量和前面所有向量乘积都为\(1\),那么其和前面向量前缀和的乘积就唯一确定 我们维护向量前缀和,第一个乘积情况不符的向量一定是答案,然后再枚举另一个向量即 \(O(nd)\) 如果模数为\(3\),乘积如果不为\(0\),还可以为\(1\)或\(2\),我们讨论的方法就不适用了 其实还是可以的 \[1^2 = 2^2 = 1 \pmod 3\] 我们…