考虑奇技淫巧。

  首先是k=2。对向量维护一个前缀和,每次将当前向量与前缀和点乘。如果点乘结果不等于i-1&1,说明当前向量至少和之前的某个向量的数量积是2的倍数,暴力找就可以了。当然等于i-1&1也不一定就不存在,这本质上还是个随机算法,于是先random_shuffle一下。

  k=3时,注意到12≡22≡1(mod 3),于是维护一个平方前缀和。具体的化一下式子就可以得出。

  调了半天才发现bzoj题面上的数据范围锅了。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<ctime>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 100010
#define D 110
int n,d,k,a[N][D],b[D],c[D][D],id[N];
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj3243.in","r",stdin);
freopen("bzoj3243.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
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<=n;i++) id[i]=i;
srand(time());
random_shuffle(id+,id+n+);
if (k==)
{
for (int i=;i<=d;i++) b[i]=a[id[]][i];
for (int i=;i<=n;i++)
{
int tot=;
for (int j=;j<=d;j++)
tot+=a[id[i]][j]&b[j];
if ((tot&)!=(i-&))
{
for (int j=;j<i;j++)
{
int tot=;
for (int k=;k<=d;k++) tot+=a[id[i]][k]&a[id[j]][k];
if (tot%==) {cout<<min(id[i],id[j])<<' '<<max(id[i],id[j])<<endl;return ;}
}
}
for (int j=;j<=d;j++)
b[j]=b[j]+a[id[i]][j]&;
}
}
else
{
for (int i=;i<=d;i++)
for (int j=;j<=d;j++)
c[i][j]=a[id[]][i]*a[id[]][j]%;
for (int i=;i<=n;i++)
{
int tot=;
for (int j=;j<=d;j++)
for (int k=;k<=d;k++)
tot+=a[id[i]][j]*a[id[i]][k]*c[j][k];
if (tot%!=(i-)%)
{
for (int j=;j<i;j++)
{
int tot=;
for (int k=;k<=d;k++)
for (int l=;l<=d;l++)
tot+=a[id[i]][k]*a[id[i]][l]*a[id[j]][k]*a[id[j]][l];
if (tot%==) {cout<<min(id[i],id[j])<<' '<<max(id[i],id[j])<<endl;return ;}
}
}
for (int j=;j<=d;j++)
for (int k=;k<=d;k++)
c[j][k]=(c[j][k]+a[id[i]][j]*a[id[i]][k])%;
}
}
cout<<-<<' '<<-;
return ;
}

BZOJ3243 NOI2013向量内积(随机化)的更多相关文章

  1. 【BZOJ-3243】向量内积 随机化 + 矩阵

    3243: [Noi2013]向量内积 Time Limit: 10 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 1249  Solved:  ...

  2. BZOJ3243 [Noi2013]向量内积 【乱搞】

    题目链接 BZOJ3243 题解 模数只有\(2\)或\(3\),可以大力讨论 如果模数为\(2\),乘积结果只有\(1\)或\(0\) 如果一个向量和前面所有向量乘积都为\(1\),那么其和前面向量 ...

  3. 【fake题解】[NOI2013]向量内积

    [fake题解][NOI2013]向量内积 做法1 大暴力.哪里不会T哪里. 做法2 所有数都%=k不影响结果.(废话 k的取值只有2和3,所以肯定是要分类讨论的.k=2肯定简单些啦. k=2 出现的 ...

  4. [Noi2013]向量内积

    来自FallDream的博客,未经允许,请勿转载,谢谢. 两个d 维向量A=[a1,a2,...,ad]与B=[b1,b2,...,bd]的内积为其相对应维度的权值的乘积和,即: $\sum_{i=1 ...

  5. P1224 [NOI2013]向量内积

    传送门 发现这个内积和矩乘有点像,考虑构造一个 $n$ 行 $m$ 列的矩阵 $A$,每一行都是一个题目给定的 $m$ 维向量 设 $B=AA^T$ ,其中 $A^T$ 为 $A$ 的转置矩阵,那么对 ...

  6. luogu P1224 [NOI2013]向量内积

    传送门 挺有意思的一道题 暴力60就是枚举每个向量暴力check,随机选向量就能多骗一些分 然后两个向量内积要模\(k\)为\(0\),那么如果全部不为\(0\)就不合法.先考虑\(k=2\),对于向 ...

  7. BZOJ3243/UOJ121 [Noi2013]向量内积

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  8. UOJ#121. 【NOI2013】向量内积 随机化算法,矩阵

    原文链接www.cnblogs.com/zhouzhendong/UOJ121.html 前言 完蛋了我越来越菜了贺题都不会了. 题解 $O(n ^ 2 d) $ 暴力送 60 分. Bitset 优 ...

  9. 洛谷 P1224 - [NOI2013] 向量内积(随机化)

    洛谷题面传送门 一道很神的随机化. 首先由于我们要求向量点乘 \(\bmod k\) 的值,因此我们可以将所有 \(x_{i,j}\) 都模上 \(k\),显然该操作不影响结果正确性. 注意到这里的 ...

随机推荐

  1. appium 遇到的坑

    上周开始试着来用appium,首先开始去官网看,然后下载appium客户端,下载安装后,然后笔者开始安装android sdk   ,进官网下载后,笔者下载安装后,在更新下载SDK Manager的时 ...

  2. Eclipse启动Tomcat错误:Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already

    Eclipse启动Tomcat错误: Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are alread ...

  3. 对最近java基础学习的一次小结

    开头想了3分钟,不知道起什么名字好,首先内容有点泛,但也都是基础知识. 对之前所学的java基础知识做了个小结,因为我是跟着网上找的黑马的基础视频看跟着学的,10天的课程硬生生给我看了这么久,也是佛了 ...

  4. 保留mysql数据库中的最新1000条记录

    <?php mysql_connect("localhost","root","root");mysql_select_db(&quo ...

  5. OpenGL 笔记<1> 固定管线实例 + 双缓存测试实例

    欲以此分类来记录opengl的学习历程,此为第一篇,所以先来一个固定管线的例子,以及对双缓存的测试. 一.配置环境 写之前,先进行配置,然后再讲内容. 注:第一部分涉及的代码均忽略. [环境配置传送门 ...

  6. 前端基础之CSS(总结)

    css学什么?? 主要学习选择器和属性,选择器是去找到标签的位置,属性是给标签增加需要的样式. CSS选择器 1.基本选择器: 1.标签选择器 2.ID选择器 3.类选择器(class="c ...

  7. 013-- mysql常用的查询优化方法

    浅谈MySQL中优化sql语句查询常用的30种方法   1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句 ...

  8. C++ 单例模式总结与剖析

    目录 C++ 单例模式总结与剖析 一.什么是单例 二.C++单例的实现 2.1 基础要点 2.2 C++ 实现单例的几种方式 2.3 单例的模板 三.何时应该使用或者不使用单例 反对单例的理由 参考文 ...

  9. 路由器终端常用linux命令汇总(持续更新)

    ls:显示文件名与相关属性 ls -al;ls -l;ls -a 第一列: d:表示目录,dir. -:表示文件. l:表示链接文件,linkfile. 接下来的字符三个为一组,且均为rwx这3个字母 ...

  10. .NetCore下使用EF DbFirst操作MySql

    新建.NetCore的控制台项目 使用Nuget安装Pomelo.entityframeworkcore.mysql 工程右键--->编辑.csproj文件,把以下内容写入到工程文件 <I ...