【NOI2013】向量内积【随机化】

传送门

题意:给nnnddd维向量,询问是否有两个向量内积(对应位乘积和)为kkk的倍数

n≤100000,d≤100,k=2,3n \leq100000,d\leq100,k=2,3n100000,d100,k=2,3

考虑每个向量能否与之前的某一个匹配

如果我们找到某一个与之前的可以匹配,就可以O(nd)O(nd)O(nd)得到答案。我们要做的是排除不能匹配的答案。

(以下mmm为题中给的kkk

∀1≤i<n,∑k=1dai,kan,k≠0(modm)\forall1\leq i<n,\sum_{k=1}^{d}a_{i,k}a_{n,k}\neq0\pmod{m}1i<n,k=1dai,kan,k=0(modm)

m=2m=2m=2

∀1≤i<n,∑k=1dai,kan,k≡1(mod2)\forall1\leq i<n,\sum_{k=1}^{d}a_{i,k}a_{n,k}\equiv1\pmod{2}1i<n,k=1dai,kan,k1(mod2)

弱化得

∑i=1n−1∑k=1dai,kan,k≡n−1(mod2)\sum_{i=1}^{n-1}\sum_{k=1}^{d}a_{i,k}a_{n,k}\equiv n-1\pmod{2}i=1n1k=1dai,kan,kn1(mod2)

∑k=1d(∑i=1n−1ai,k)an,k≡n−1(mod2)\sum_{k=1}^{d}(\sum_{i=1}^{n-1}a_{i,k})a_{n,k}\equiv n-1\pmod{2}k=1d(i=1n1ai,k)an,kn1(mod2)

维护个前缀和判一下,如果不满足说明一定有答案

感性理解,理论上这个答案是随便找得到的,所以随机打乱几次能大概率出解

m=3m=3m=3时同理

∀1≤i<n,∑k=1dai,kan,k≡1or2(mod3)\forall1\leq i<n,\sum_{k=1}^{d}a_{i,k}a_{n,k}\equiv1 or 2\pmod{3}1i<n,k=1dai,kan,k1or2(mod3)

平方一下

∀1≤i<n,(∑k=1dai,kan,k)2≡1(mod3)\forall1\leq i<n,(\sum_{k=1}^{d}a_{i,k}a_{n,k})^2\equiv1 \pmod{3}1i<n,(k=1dai,kan,k)21(mod3)

∑i=1n−1(∑k=1dai,kan,k)2≡n−1(mod3)\sum_{i=1}^{n-1}(\sum_{k=1}^{d}a_{i,k}a_{n,k})^2\equiv n-1\pmod{3}i=1n1(k=1dai,kan,k)2n1(mod3)

强行拆开

∑i=1n−1∑x=1d∑y=1dai,xan,xai,yan,y≡n−1(mod3)\sum_{i=1}^{n-1}\sum_{x=1}^{d}\sum_{y=1}^da_{i,x}a_{n,x}a_{i,y}a_{n,y}\equiv n-1\pmod{3}i=1n1x=1dy=1dai,xan,xai,yan,yn1(mod3)

∑x=1d∑y=1d(∑i=1n−1ai,xai,y)an,xan,y≡n−1(mod3)\sum_{x=1}^{d}\sum_{y=1}^d(\sum_{i=1}^{n-1}a_{i,x}a_{i,y})a_{n,x}a_{n,y}\equiv n-1\pmod{3}x=1dy=1d(i=1n1ai,xai,y)an,xan,yn1(mod3)

然后就可以维护了

复杂度O(ndk−1)O(nd^{k-1})O(ndk1)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <algorithm>
#define MAXN 100005
#define MAXM 105
using namespace std;
inline int read()
{int ans=0;char c=getchar();while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();return ans;
}
int id[MAXN],a[MAXN][MAXM];
int c[MAXM][MAXM],s[MAXM];
int n,d,k;
inline bool check(int x,int y)
{int sum=0;for (int i=1;i<=d;i++) sum+=a[x][i]*a[y][i];return sum%k==0;
}
int main()
{n=read(),d=read(),k=read();for (int i=1;i<=n;i++)for (int j=1;j<=d;j++)a[i][j]=read()%k;for (int i=1;i<=n;i++) id[i]=i;int T=10;while (T--){random_shuffle(id+1,id+n+1);if (k==2){for (int i=1;i<=d;i++) s[i]=0;for (int i=1;i<=n;i++){int sum=0;for (int j=1;j<=d;j++) sum+=s[j]*a[id[i]][j];if (sum%2!=(i-1)%2){for (int x=1;x<i;x++)if (check(id[x],id[i])){if (id[i]>id[x]) swap(id[i],id[x]);printf("%d %d\n",id[i],id[x]);return 0;}}for (int j=1;j<=d;j++) s[j]+=a[id[i]][j];}}else{for (int i=1;i<=d;i++)for (int j=1;j<=d;j++)c[i][j]=0;for (int i=1;i<=n;i++){int sum=0;for (int x=1;x<=d;x++)for (int y=1;y<=d;y++)sum+=c[x][y]*a[id[i]][x]*a[id[i]][y];if (sum%3!=(i-1)%3){for (int j=1;j<i;j++)if (check(id[j],id[i])){if (id[j]>id[i]) swap(id[j],id[i]);printf("%d %d\n",id[j],id[i]);return 0;}}for (int x=1;x<=d;x++)for (int y=1;y<=d;y++)c[x][y]+=a[id[i]][x]*a[id[i]][y];}}}puts("-1");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round #212 (Div. 2) C. Insertion Sort 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n≤5000n\le5000n≤5000 思路&#xff1a; 从dpdpdp题集中看到的&#xff0c;一看n≤5000n\le5000n≤5000&#xff0c;这不就乱搞就行了&#xff0c;哪有什么dpdpdp&#x1f986;。 看到冒泡排序&#xff0…

[Abp vNext 源码分析] - 4. 工作单元

一、简要说明统一工作单元是一个比较重要的基础设施组件&#xff0c;它负责管理整个业务流程当中涉及到的数据库事务&#xff0c;一旦某个环节出现异常自动进行回滚处理。在 ABP vNext 框架当中&#xff0c;工作单元被独立出来作为一个单独的模块(Volo.Abp.Uow)。你可以根据自己…

OI训练记录

2019/12/25 Linux下VS code安装、emacs基础配置、gdb简单使用 NOI2013 向量内积 构造一个貌似随便找到但复杂度不允许的方案&#xff0c;可以考虑弱化条件后随机化 NOI2013 树的计数 2019/12/26 NOI2013 矩阵游戏(无blog) 矩阵幂不满足费马小定理&#xff0c;需要推导通…

Codeforces Round #462 (Div. 2) C. A Twisty Movement dp + 思维转换

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个长度为nnn的只包含1,21,21,2的序列aaa&#xff0c;你可以至多翻转一段区间&#xff0c;求翻转之后最长非递减子序列是多长。 思路&#xff1a; 考虑如果翻转的话&#xff0c;翻转的子区间肯定是22…

使用 Cake 推送 NuGet 包到 AzureDevops 的 Artifacts 上

大家好&#xff0c;我最近在想如何提交代码的时候自动的打包 NuGet 然后发布到 AzureDevOps 中的 Artifacts&#xff0c;在这个过程中踩了很多坑&#xff0c;也走了很多弯路&#xff0c;所以这次篇文章就是将我探索的结果和我遇到的一些问题整理分享给大家。我的上一篇关于 CI/…

【NOI2013】树的计数【树的遍历】【期望】

传送门 题意&#xff1a;给定一棵nnn个点的树的DFS和BFS序&#xff0c;求树高期望。 n≤2e5n \leq 2e5n≤2e5 首先根据BFS序将树点分层&#xff0c;一定切记先自己把树点分层&#xff0c;这样实际上是在排除一部分情况。 将每一层第一个点打标记&#xff0c;答案就是期望标记…

Codeforces Round #632 (Div. 2) C. Eugene and an array 思维 + 前缀和

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给定一个长度为nnn的序列aaa&#xff0c;定义一段区间为好区间是这段区间的所有连续子区间的和都不为000&#xff0c;求好区间的个数。 思路&#xff1a; 套路题&#xff0c;定义aia_iai​的前缀和bi∑j1i…

C++中vector返回值的最高效返回

返回值优化&#xff08;RVO&#xff09; std::vector<int> get_vector() {std::vector<int> v {1, 2, 3, 4, 5};return v; // 依赖编译器进行返回值优化&#xff0c;消除多余的拷贝 }虽然看起来像是在返回一个局部变量&#xff08;通常会引发拷贝或者移动&…

了解Kubernetes主体架构(二十八)

前言 Kubernetes的教程一直在编写&#xff0c;目前已经初步完成了以下内容&#xff1a;1&#xff09;基础理论2&#xff09;使用Minikube部署本地Kubernetes集群3&#xff09;使用Kubeadm创建集群接下来还会逐步完善本教程&#xff0c;比如Helm、ELK、Windows Serv…

【NOI2013】快餐店【基环树】【树的直径】【set】

传送门 题意&#xff1a;给一棵nnn个点的基环树&#xff0c;找一个点&#xff08;可以在边上&#xff09;&#xff0c;求所有节点到这个点的最大值的最小值。 n≤1e5n \leq1e5n≤1e5 先考虑一棵普通树的情况 显然是直径长度的一半 因为如果有个点大于直径长度的一半&#x…

Codeforces Round #632 (Div. 2) F. Kate and imperfection 数论 + 贪心

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n≤5e5n\le5e5n≤5e5 思路&#xff1a; 首先有个显然的结论&#xff1a;当往集合中加入一个数xxx的时候&#xff0c;如果存在d∣xd|xd∣x且ddd不在集合中&#xff0c;那么加入ddd一定比加入xxx更优。 也就是…

.NET开发框架(二)-框架功能简述

本框架为响应式SPA框架&#xff0c;支持PC与手机端的屏幕自适应。手机展示效果视频在文章末尾查看。框架入口地址&#xff1a;http://letyouknow.net/1、框架登录界面&#xff0c;输入账号与密码&#xff0c;点击立即登录2、框架主界面&#xff0c;左-右结构&#xff0c;左边为…

杜教筛复杂度证明

我们实际上求的是这玩意 T(n)n∑i1n(T(i)T(ni))T(n)\sqrt{n}\sum_{i1}^{\sqrt{n}}(T(i)T(\frac{n}{i}))T(n)n​i1∑n​​(T(i)T(in​)) 我们只需要考虑 T(n)n∑i1n(ini)T(n)\sqrt{n}\sum_{i1}^{\sqrt{n}}(\sqrt i\sqrt\frac{n}{i})T(n)n​i1∑n​​(i​in​​) 对于之后的项&a…

Codeforces Round #632 (Div. 2) E. Road to 1600 构造好题

传送门 文章目录题意&#xff1a;思路题意&#xff1a; 直接白嫖 思路 首先不难发现&#xff0c;n≤2n\le2n≤2的时候是无解的。 现在我们来构造n3n3n3的情况&#xff0c;通过打表可以发现如下矩阵是符合题目要求的&#xff1a; 179325486\begin{array}{ccc} 1&7&9…

SiteServer CMS 新版本 V6.11(2019年7月1日发布)

欢迎来到 SiteServer CMS V6.11版本&#xff08;.NET CORE V7.0预览版本将推迟至2019年9月1日发布&#xff09;&#xff0c;经过两个月的连续迭代开发&#xff0c;V6.11 版本新增了采集插件以及多项BUG修复&#xff1a;SS.Gather 页面采集插件页面采集插件将在V6.11版本中正式提…

【NOI2016】循环之美【莫比乌斯反演】【整除分块】【杜教筛】【类杜教筛】

传送门 题意&#xff1a;给定n,m,kn,m,kn,m,k,求1≤x≤n,1≤y≤m1\leq x\leq n,1\leq y\leq m1≤x≤n,1≤y≤m时xyx \over yyx​中数值不同的纯循环小数或整数的个数。 n≤109,m≤109,k≤2103n \leq 10^9,m\leq10^9,k\leq2\times10^3n≤109,m≤109,k≤2103 显然只需要考虑最简…

P1020 [NOIP1999 普及组] 导弹拦截 Dilworth定理 + dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 对于第一问直接输出最长不严格下降子序列即可&#xff0c;第二问是Dilworth定理&#xff0c;变形比较多&#xff0c;之前也写过类似的&#xff0c;这里贴个证明。 //#pragma GCC optimiz…

参数传递机制之JWT

1. 什么是 JWTJWT 其全称为&#xff1a;JSON Web Token&#xff0c;简单地说就是 JSON 在 Web 上的一种带签名的标记形式。官方的定义如下&#xff1a;JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.…

【NOI2009】诗人小G【决策单调性dp】

传送门 设句子加上空格长度前缀和为sss 转移方程为 fimin⁡1≤j<i{fj∣si−sj−L−1∣P}f_i\min_{1\leq j<i}\{f_j|s_i-s_j-L-1|^P\}fi​1≤j<imin​{fj​∣si​−sj​−L−1∣P} 不难发&#xff08;cai&#xff09;现&#xff08;chu&#xff09;决策具有单调性 …

Codeforces Round #709 (Div. 1) B. Playlist 链表维护 + bfs

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 紧跟刘爷脚步补题。 不难想到用链表维护下一个数是什么&#xff0c;这样就跟以前做过的一个题差不多了&#xff0c;首先将初始的时候删掉的点的前一个点即为题目中的AAA入队&#xff0c;让…