luogu P1224 [NOI2013] 向量内积
比较妙妙的题目。
首先我们考虑,直接暴力没有优化方式,考虑随机化。
我们随机一个向量的排列方式,将第个向量和前面的向量求出内积之和的结果,如果这个结果不等于,则说明前面一定有一个向量与它的内积为,则暴力检验即可。单个向量每次随机成功概率为,实际上多随几次就过了。
然后考虑,我们发现问题在于乘积有与是不固定的,也就没有办法用上面那个方法判定前面是否一定有一个与其内积为。但是我们又发现,则平方即可按照上面的方法做。时间复杂度,为随机轮数。
尽管取就能过
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");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2021-11-14 LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度