Day 1

 

T1:向量内积

直接暴力有60。发现将n个向量合成$n\times d$的矩阵$A$,然后求$A\times A^T$,得到的矩阵包含了所有的答案。

先考虑$k=2$,将答案矩阵和全1矩阵比较,为0的地方就是答案。

回忆一个十分经典的问题:判断$A\times B$是否与$C$相等。

先随机一个行向量v,若$v\times(A\times B)=v\times A \times B\neq v\times C$,则直接返回$false$。多次随机,成功率为$1-(\frac12)^{times}$。

这种随机化算法通常用于:某对命题充分性和必要性仅具备一个,所以多做几次判定就能提高正确率。$Miller-Rabin$算法就是一个典型的例子。

回到这道题,应用lych的话:

假设对于i,我们求出i之前的所有向量与i的点积的和;如果所有的点积都>0 即=1,那么显然点积的和对二取模=(i-1)%2;否则如果≠(i-1)%2,显然i与i前面的某一个向量的点积=0,我们O(ND)寻找答案即可。但 是这样不一定能得到解,我们不妨随机打乱向量的顺序然后判断,这样至少是1-(1/2)^5的正确率了。

问题在3怎么做,因为不为0可能意味着为1或2,不能确定答案,但是发现在模意义下$1^2\equiv 2^2 (mod 3)$。所以只要平方一下就好了。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define rep(i,l,r) for (int i=(l); i<=(r); i++)
 5 using namespace std;
 6 
 7 const int N=100010,M=110;
 8 int n,m,mod,a[N][M],q[N],b[M],c[M][M];
 9 
10 bool check(int x,int y){
11     int tmp=0;
12     rep(i,1,m) tmp+=a[x][i]*a[y][i];
13     return !(tmp%mod);
14 }
15 
16 int solve(int x){
17     int ans=0;
18     if (mod==2)
19         rep(i,1,m) ans^=b[i]&a[x][i],b[i]^=a[x][i];
20     else
21         rep(i,1,m) rep(j,1,m) ans+=c[i][j]*a[x][i]*a[x][j],c[i][j]+=a[x][i]*a[x][j];
22     return ans%mod;
23 }
24 
25 int main(){
26     freopen("meow.in","r",stdin);
27     freopen("meow.out","w",stdout);
28     scanf("%d%d%d",&n,&m,&mod);
29     rep(i,1,n) rep(j,1,m) scanf("%d",&a[i][j]),a[i][j]%=mod;
30     rep(i,1,n) q[i]=i;
31     for (int T=7-mod; T--; ){
32         if (mod==2) memset(b,0,sizeof(b)); else memset(c,0,sizeof(c));
33         rep(i,2,n) swap(q[i],q[rand()%(i-1)+1]);
34         rep(i,1,n) if (solve(q[i])!=(i-1)%mod)
35             rep(j,1,i-1) if (check(q[i],q[j])){
36                 if (q[i]>q[j]) swap(i,j);
37                 printf("%d %d\n",q[i],q[j]); return 0;
38             }
39     }
40     puts("-1 -1");
41     return 0;
42 }
View Code

相关文章:

  • 2022-02-13
  • 2021-10-15
  • 2022-01-03
  • 2021-10-15
  • 2022-02-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-25
  • 2021-08-17
  • 2021-12-08
  • 2021-10-30
  • 2021-11-14
  • 2022-12-23
  • 2021-09-16
相关资源
相似解决方案