首页 > 其他分享 >luogu P1224 [NOI2013] 向量内积

luogu P1224 [NOI2013] 向量内积

时间:2022-11-14 11:44:06浏览次数:82  
标签:内积 luogu bmod long P1224 NOI2013 using 向量 define

题面传送门

比较妙妙的题目。

首先我们考虑\(k=2\),直接暴力没有优化方式,考虑随机化。

我们随机一个向量的排列方式,将第\(i\)个向量和前面的向量求出内积之和\(\bmod k\)的结果,如果这个结果不等于\((i-1)\bmod 2\),则说明前面一定有一个向量与它的内积为\(0\),则暴力检验即可。单个向量每次随机成功概率为\(\frac{1}{2}\),实际上多随几次就过了。

然后考虑\(k=3\),我们发现问题在于\(k=3\)乘积有\(1\)与\(2\)是不固定的,也就没有办法用上面那个方法判定前面是否一定有一个与其内积为\(0\)。但是我们又发现\(1^2\bmod k=2^2\bmod k\),则平方即可按照上面的方法做。时间复杂度\(O(nd^2T)\),\(T\)为随机轮数。

尽管取\(T=1\)就能过

code:

#include<bits/stdc++.h>
#define Gc() getchar() 
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) ((m)*(x-1)+(y))
#define R(n) (rnd()%(n))
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define PB push_back
using ll=long long;using db=double;using lb=long db;using ui=unsigned;using ull=unsigned ll;
using namespace std;const int N=1e5+5,M=100+5,K=(1<<10)+5,mod=1e9+7,Mod=mod-1;ll INF=1e18+7;const db eps=1e-5;mt19937 rnd(time(0));
int n,d,k,g[M][M],Ts;
struct Node{int A[M],id;}S[N];
void CK(Node x,Node y){ll Ts=0;for(int i=1;i<=d;i++) Ts+=x.A[i]*y.A[i];if(Ts%k==0) {printf("%d %d\n",min(x.id,y.id),max(x.id,y.id));exit(0);}}
int main(){
	freopen("1.in","r",stdin);
	int i,j,h;scanf("%d%d%d",&n,&d,&k);for(i=1;i<=n;S[i].id=i,i++) for(j=1;j<=d;j++) scanf("%d",&S[i].A[j]),S[i].A[j]%=k;
	int T=1;while(T--){
		Me(g,0);shuffle(S+1,S+n+1,rnd);for(i=1;i<=n;i++){
			Ts=0;for(j=1;j<=d;j++) for(h=1;h<=d;h++) Ts+=g[j][h]*S[i].A[j]*S[i].A[h];if(Ts%k!=(i-1)%k){for(j=1;j<i;j++) CK(S[i],S[j]);cerr<<1<<'\n';} 
			for(j=1;j<=d;j++) for(h=1;h<=d;h++) g[j][h]=(S[i].A[j]*S[i].A[h]+g[j][h])%k;
		}
	}puts("-1 -1");
}

标签:内积,luogu,bmod,long,P1224,NOI2013,using,向量,define
From: https://www.cnblogs.com/275307894a/p/16888507.html

相关文章

  • luogu P4786 [BalkanOI2018]Election
    题面传送门离谱题,结论出奇的简单。首先我们考虑\(O(nq)\)怎么做。显然所有C都要放在最终序列中,然后问题就变成往里面填T。我们考虑第一个T填在能填的最开始的位置上,因......
  • LuoguP1586 题解
    也可以在LuoguP1586(tencentcs.com)获得更好的阅读体验。Luogu_P1586题解一道比较简单的题目,看到求种类数,考虑DP。设\(f_{i,j}\)表示第\(i\)个数划分为\(j\)......
  • Luogu P5816[CQOI2010]内部白点题解
    LinkLuoguP5816Description一个平面直角坐标系内有\(n\)个黑点,其余点为白点,将会进行若干次变换,每次变换会把上下左右方向都有黑点的白点变成黑点,直到找不到符合要求......
  • 【题解】Luogu P8743 【[蓝桥杯 2021 省 A] 异或数列】
    最近刚好在刷博弈论,看到这道题没有题解,所以刚好来水一发题目链接[蓝桥杯2021省A]异或数列题目描述Alice和Bob正在玩一个异或数列的游戏。初始时,Alice和Bob......
  • luogu 5022
    任意选定一个城市作为起点,然后从起点开始,每次可以选择一条与当前城市相连的道路,走向一个没有去过的城市,或者沿着第一次访问该城市时经过的道路后退到上一个城市。当回到......
  • Luogu5518
    太闲了,推柿子!\(type=1\)\[\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C\frac{\operatorname{lcm}\{i,j\}}{\gcd\{i,k\}}\\=\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C\frac{......
  • luogu 3155
     m 个节点的无根树,选一个根,将一些节点染成黑色或白色。你的着色方案应保证根节点到各叶子节点的简单路径上都包含一个有色节点,哪怕是叶子本身。对于每个叶子节点 u,定......
  • Luogu P5435 基于值域预处理的快速 GCD
    最近做这道题的时候被卡常了,然后突然想起来曾经偶然在陈指导的博客看到过这个\(O(1)\)做\(\gcd\)的方法其实理解了之后还是比较简单的,以下设数的值域为\(S\)首先我们定义......
  • Luogu4315 月下“毛景树” - 树链剖分 -
    题目链接:https://www.luogu.com.cn/problem/P4315题意:一棵有边权的树,维护树上的链加、链覆盖、修改边权、链上max题解:好难写...首先把边权转化为儿子的点权然后树链剖......
  • 【luogu P1600】天天爱跑步(线段树合并)(LCA)
    天天爱跑步题目链接:luoguP1600题目大意有一棵树,给你若干条路径,对于每个点,有一个数x,求出有多少条路径的第x个点是当前点。思路考虑把路径拆成两个部分,向上和向下。......