【BZOJ-3243】向量内积 随机化 + 矩阵
3243: [Noi2013]向量内积
Time Limit: 10 Sec Memory Limit: 256 MBSec Special Judge
Submit: 1249 Solved: 248
[Submit][Status][Discuss]
Description
两个d 维向量A=[a1,a2,...,ad]与B=[b1,b2,...,bd]的内积为其相对应维度的权值的乘积和,即:
现有 n 个d 维向量x1,...,xn ,小喵喵想知道是否存在两个向量的内积为k的倍数。请帮助她解决这个问题
Input
Output
Sample Input
0 0 1 1 1 1 1 0 1 1 1 0 1 0 0 0 1 1 1 1
1 0 1 0 1 0 1 1 1 1 0 1 1 1 0 1 1 0 1 0
Sample Output
HINT
新增数据一组,但未重测By TA1111,2016.5.17
Source
Solution
这道题非常劲。
首先在这道题因为只是输出一组即可,所以,可以想到乱搞。
最暴力的方法就是$O(N^2d)$的复杂度枚举,非常不科学。
考虑利用矩阵的性质,直接用$A*A^{T}$,这样的复杂度还是$O(N^{2}d)$的。
然后我们考虑随机乱搞。 直接随机两个相乘,误差太大,复杂度极不稳定。
然后我们考虑拿一个向量,去和其他所有向量相乘。这样单次的复杂度是$O(Nd)$的,可以稍多做几次。
在$K=2$的时候,我们关心的是矩阵中是否有0,然后我们取这样一个向量做的时候,如果有一个位置不一样,那么就说明有不同。
然后我们就可以直接暴力的找这个不同的位置了。
这样也是有概率出错的,所以我们需要多做几次。
至于这个向量的选取,我们考虑随机一个向量。 对于这个矩阵,我们也可以随机一个排列,这样能降低错误概率。
然后就是$K=3$的情况了。 这样就不是直接考虑$modK$后1,0的情况了,因为这样会出现0,1,2的情况,然后很神奇的,$1^{2}=1mod3=1,2^{2}=4mod3=1$
然后我们对他们平方,就变成了$d^{2}$维的向量了,就又转变为上述情况了,复杂度自然也变成了$O(d^{2})$。
TA爷说这是卡不掉的。
需要随机的那个向量,是必须随机,因为如果构造的话,是可以卡的,比如构造全1向量就可以被卡。
讲道理应该多random_shuffle几遍的,但是我就random_suffle了一遍就很exciting的AC了...然而跑的还是不快。
Code
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
using namespace std;
inline int read()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
#define MAXN 100010
int N,d,K,A[MAXN][],B[],C[][];
int Judge(int x,int y)
{
int re=;
for (int i=; i<=d; i++) re+=A[x][i]*A[y][i];
return re%K;
}
int OK(int x)
{
int re=;
if (K==)
for (int i=; i<=d; i++) re^=B[i]&A[x][i],B[i]^=A[x][i];
else
for (int i=; i<=d; i++)
for (int j=; j<=d; j++)
re+=C[i][j]*A[x][i]*A[x][j],(C[i][j]+=A[x][i]*A[x][j])%=K;
return re%K;
}
int id[MAXN];
void Solve()
{
for (int i=; i<=N; i++) id[i]=i;
random_shuffle(id+,id+N+);
memset(B,,sizeof(B)); memset(C,,sizeof(C));
for (int i=; i<=N; i++)
if (OK(id[i])!=(i-)%K)
for (int x,y,j=; j<=i-; j++)
if (!Judge(id[i],id[j]))
x=min(id[i],id[j]),y=max(id[i],id[j]),printf("%d %d\n",x,y),exit();
}
int main()
{
N=read(); d=read(); K=read();
for (int i=; i<=N; i++)
for (int j=; j<=d; j++)
A[i][j]=read()%K;
for (int i=; i<=; i++) Solve();
puts("-1 -1");
return ;
}
【BZOJ-3243】向量内积 随机化 + 矩阵的更多相关文章
- [BZOJ]3243 向量内积(Noi2013)
小C做了之后很有感觉的题目之一,但因为姿势不对调了很久. Description 两个d 维向量A=[a1,a2,...,ad]与B=[b1,b2,...,bd]的内积为其相对应维度的权值的乘积和,即 ...
- BZOJ 3243 向量内积
Description 两个\(d\)维向量\(A=[a_{1},a_{2},...,a_{d}]\)与\(B=[b_{1},b_{2},...,b_{d}]\)的内积为其相对应维度的权值的乘积和,即 ...
- 【BZOJ3243】【NOI2013】向量内积(矩阵,数论)
[BZOJ3243][NOI2013]向量内积(矩阵,数论) 题面 BZOJ 题解 这题好神仙. 首先\(60\)分直接是送的.加点随机之类的可以多得点分. 考虑正解. 我们先考虑一下暴力. 我们把\ ...
- UOJ#121. 【NOI2013】向量内积 随机化算法,矩阵
原文链接www.cnblogs.com/zhouzhendong/UOJ121.html 前言 完蛋了我越来越菜了贺题都不会了. 题解 $O(n ^ 2 d) $ 暴力送 60 分. Bitset 优 ...
- [Noi2013]向量内积
来自FallDream的博客,未经允许,请勿转载,谢谢. 两个d 维向量A=[a1,a2,...,ad]与B=[b1,b2,...,bd]的内积为其相对应维度的权值的乘积和,即: $\sum_{i=1 ...
- LOJ 2664. 「NOI2013」向量内积 解题报告
#2664. 「NOI2013」向量内积 两个 \(d\) 维向量 \(A=[a_1, a_2 ,...,a_d]\) 与 \(B=[b_1 ,b_2 ,...,b_d]\) 的内积为其相对应维度的权 ...
- BZOJ3243/UOJ121 [Noi2013]向量内积
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- P1224 [NOI2013]向量内积
传送门 发现这个内积和矩乘有点像,考虑构造一个 $n$ 行 $m$ 列的矩阵 $A$,每一行都是一个题目给定的 $m$ 维向量 设 $B=AA^T$ ,其中 $A^T$ 为 $A$ 的转置矩阵,那么对 ...
- 【fake题解】[NOI2013]向量内积
[fake题解][NOI2013]向量内积 做法1 大暴力.哪里不会T哪里. 做法2 所有数都%=k不影响结果.(废话 k的取值只有2和3,所以肯定是要分类讨论的.k=2肯定简单些啦. k=2 出现的 ...
随机推荐
- IOS开发之Bug--遇到一个类型不确定的bug
下面的问题不大,是我在开发中遇到的问题: 然后我就google搜一下这个报错 . 下面就解决了:
- Linux命令学习总结:last
命令简介: 该命令用来列出目前与过去登录系统的用户相关信息.指令英文原义:show listing of last logged in users 执行权限 :有些需要特殊权限 指令所在路径: ...
- 15天玩转redis —— 第十一篇 让你彻底了解RDB存储结构
接着上一篇说,这里我们来继续分析一下RDB文件存储结构,首先大家都知道RDB文件是在redis的“快照”的模式下才会产生,那么如果 我们理解了RDB文件的结构,是不是让我们对“快照”模式能做到一个心中 ...
- MySQL插入语句解析
1.INSERT INTO 最常用简单的插入语句,可以有以下两种用法 1> INSERT INTO tb_user(id, name, age) VALUES (100022, 'Tom', ...
- python安装numpy和pandas
最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有外网遇到了很多问题就记下来了.首要条件,python版本必须 ...
- 第37课 深度解析QMap与QHash
1. QMap深度解析 (1)QMap是一个以升序键顺序存储键值对的数据结构 ①QMap原型为 class QMap<K, T>模板 ②QMap中的键值对根据Key进行了排序 ③QMap中 ...
- 用extract-text-webpack-plugin提取出来的css文件中背景图片url的不正确的问题
在一个main.js中require一个scss文件,scss文件中用了背景图片,图片url是用的相对路径,用extract-text-webpack-plugin插件提取出的css文件背景图片路径不 ...
- 初识CDQ分治
[BZOJ 1176:单点修改,查询子矩阵和]: 1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 200 ...
- iOS Run_time
Runtime是想要做好iOS开发,或者说是真正的深刻的掌握OC这门语言所必需理解的东西.最近在学习Runtime,有自己的一些心得,整理如下,一为 查阅方便二为 或许能给他人一些启发,三为 希望得到 ...
- codevs 2495 水叮当的舞步
题目链接:水叮当的舞步 我现在开始发题目链接了(主要还是因为懒得整理题面)-- 这道题一开始是看到MashiroSky在写,于是我也开始写这道题了(说白了就是狙击他)-- 这道题看到这么小的范围当然给 ...