日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【NOI2013】向量内积

發布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【NOI2013】向量内积 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義兩個$d$維向量${A=[a_1,a_2....a_n]}$,${B=[b_1,b_2....b_n]}$的內積為其相對應維度的權值的乘積和:

$${\left \langle A,B \right \rangle= \sum _{i=1}^ozvdkddzhkzda_i*b_i}$$

現在有$n$個$d$維向量,判斷是否存在兩個向量的內積為$k$的倍數${(2\leq k\leq 3)}$


?我們考慮將$n$個$d$維的向量構成一個$n*d$的矩陣$A$,$A^{T}$為$A$的轉置矩陣。

?令矩陣${B=A*A^{t}}$,那么${B_{i,j}}$就表示了向量$i$,與向量$j$的內積。

?直接判斷內積的值即可。

?但是這僅僅簡化了題意,復雜度仍是${O(n^{2}d)}$,大概可以得到$50$分。


?

?考慮$k=2$的情況(矩陣的取值均在模$2$的意義下進行討論)

?我們有一種經典的方法判定兩個矩陣是否相等,我們只關心$0$元素是否存在。

?令$C$為全$1$矩陣

?在模$2$的意義下隨機一個$1*n$的向量$X$。

?根據矩陣乘法的結合律判斷等式${X*A*A^{T}=X*C}$是否成立。

?若是存在有一個元素不相同,表示對應列上出現了一個$0$向量,然后暴力尋找行的位置即可。

?若是這一次沒有找到,也許是根本就沒有這樣的向量或者是剛好在這個$X$向量的影響下判為了相等,多做幾次,每次正確率約為$0.5$。

?綜合暴力至此可以得到$75$分。


?考慮$k=3$的情況,為什么就不能像$k=2$的時候那樣做了呢?

?因為矩陣$B$中的元素可以是${{0,1,2}}$了,無法再和全$1$矩陣$C$比較。

?想辦法將$k=3$的情況轉換為$k=2$的情況。

?之所以不能像$k=2$做,是因為出現了結果為$2$的情況。

?注意到一個性質:${2\equiv -1\left ( mod ?3 \right )}$

?因此,如果我們將矩乘之后的矩陣D的所有結果平方,那么C就能用全1矩陣了。

?令${NEWA\left ( i,j \right )=D(i,j)^{2}}$

?${\because NEWA\left ( i,j \right )=\sum _{k_1=1}^ozvdkddzhkzd\sum _{k_2=1}^ozvdkddzhkzdA(i,k_1)A(i,k_2)A(k1,j)A(k2,j)}$

? 你可以想象成可以把每一個$d$維向量$A$轉化為了${d^{2}}$維向量$Z$,其中${Z_{(i-1)*d+j}=a_i*a_j (1\leq i,j\leq d)}$

?${\therefore }$這個時候變成了${n*d^{2}}$的矩陣與${d^{2}*n}$的矩陣相乘。

?之后的做法就與$k=2$的情況相同。

?綜合之前的分數可以獲得$100$分

?NOTICE:$k=3$的運算是在模$3$的意義下的,只是最后的結果平方之后的值只能為${{0,1}}$。

?


1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<vector> 5 #include<cstdlib> 6 #include<cmath> 7 #include<cstring> 8 #include<ctime> 9 using namespace std; 10 #define maxn 100100 11 #define maxd 310 12 #define llg long long 13 #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout); 14 llg n,a[maxn][maxd],d,k; 15 llg X[maxn],NX[maxn]; 16 llg LX[maxn],Y[maxn],LY[maxn],T,g[maxn],l[maxn],r[maxn]; 17 llg D; 18 bool pd=false; 19 20 void init() 21 { 22 cin>>n>>d>>k; 23 for (llg i=1;i<=n;i++) 24 for (llg j=1;j<=d;j++) 25 { 26 scanf("%lld",&a[i][j]); 27 // at[j][i]=a[i][j]; 28 g[i]+=a[i][j]*a[i][j]; g[i]%=k; 29 } 30 } 31 32 void check(llg i,llg j) 33 { 34 llg sum=0; 35 for (llg p=1;p<=d;p++) sum+=a[i][p]*a[j][p]; 36 sum%=k; 37 if (sum==0) 38 { 39 if (i>j) swap(i,j); 40 printf("%lld %lld\n",i,j); 41 pd=true; 42 } 43 } 44 45 inline void solve2() 46 { 47 memset(LX,0,sizeof(LX)); memset(NX,0,sizeof(NX)); 48 llg tot=0; 49 for (llg i=1;i<=n;i++) X[i]=rand()%k,tot+=X[i],tot%=k; 50 for (llg i=1;i<=d;i++) 51 for (llg j=1;j<=n;j++) 52 NX[i]+=X[j]*a[j][i],NX[i]%=k; 53 for (llg i=1;i<=n;i++) 54 for (llg j=1;j<=d;j++) 55 LX[i]+=NX[j]*a[i][j],LX[i]%=k; 56 for (llg i=1;i<=n;i++) 57 if (LX[i]!=tot) 58 { 59 for (llg j=1;j<=n;j++) 60 if (i!=j) 61 { 62 if (pd) return ; 63 check(i,j); 64 } 65 } 66 } 67 68 void solve3() 69 { 70 memset(LX,0,sizeof(LX)); memset(NX,0,sizeof(NX)); 71 llg tot=0; 72 for (llg i=1;i<=n;i++) X[i]=rand()%k,tot+=X[i]; 73 tot%=k; 74 for (llg j=1;j<=n;j++) 75 for (llg i=1;i<=D;i++) NX[i]+=X[j]*a[j][l[i]]*a[j][r[i]]; 76 for (llg i=1;i<=n;i++) 77 { 78 for (llg j=1;j<=D;j++) LX[i]+=NX[j]*a[i][l[j]]*a[i][r[j]]; 79 LX[i]+=(1-g[i])*X[i]; LX[i]%=k; LX[i]+=k; 80 if (LX[i]%k!=tot) 81 { 82 for (llg j=1;j<=n;j++) 83 if (i!=j) 84 { 85 if (pd) return; 86 check(i,j); 87 } 88 llg he=1; 89 } 90 } 91 } 92 93 int main() 94 { 95 yyj("a"); 96 srand(time(NULL)); 97 init(); 98 if (k==2) 99 { 100 T=10; 101 while (T--) 102 { 103 solve2(); 104 if (pd) return 0; 105 } 106 } 107 else 108 { 109 T=1; 110 for (llg i=1;i<=n;i++) g[i]*=g[i],g[i]%=k; 111 D=d*d; 112 for (llg i=1;i<=D;i++) 113 { 114 llg t=(i%d==0)?i/d:i/d+1; 115 l[i]=t,r[i]=i-(t-1)*d; 116 } 117 while (T--) 118 { 119 solve3(); 120 if (pd) return 0; 121 } 122 } 123 if (!pd) cout<<"-1 -1"; 124 return 0; 125 }

?HACK(若取全1矩陣C,但C的對角線均設為了0):

4 6 2 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1

${A*A^{T}}$

0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0

全${1}$向量${X}$

?1 1 1 1?

${A*X*A^{t}}$

?1 1 1 1?

${C*X}$

?1 1 1 1?

將誤判為相等。

轉載于:https://www.cnblogs.com/Dragon-Light/p/6378185.html

總結

以上是生活随笔為你收集整理的【NOI2013】向量内积的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美激情精品久久 | 美女福利在线 | 日韩久久精品 | 色超碰| 山村淫强伦寡妇 | 欧美亚洲视频在线观看 | 国产午夜福利视频在线观看 | 高跟鞋调教—视频|vk | 欧美一性一乱一交一视频 | av中文字幕亚洲 | 成人免费看片在线观看 | 国产另类专区 | 国产无遮挡一区二区三区毛片日本 | 伊人狼人综合 | 国产欧美日韩综合精品一区 | 色婷婷av一区二区三区在线观看 | 久久福利免费视频 | 人人草人人草 | 日本资源在线 | 成人久久18免费网站图片 | 一线毛片 | 日韩一级二级 | 亚洲免费毛片 | 精品人妻一区二区三区视频 | 国内精品久久久 | 日韩精品免费在线观看 | 交hdsexvideos娇小| 性一交一乱一透一a级 | 日韩av高清 | 欧美在线观看视频一区二区 | 成人性生交大全免 | 在线不卡欧美 | 韩国美女啪啪 | 久久这里只有精品首页 | caopor在线视频 | 中文字幕在线观看高清 | 日韩欧美激情在线 | 一级做a爱片久久毛片 | 成人天堂网 | 天天天干干干 | 快灬快灬一下爽69 | 国产夫妻露脸 | 嫩草视频入口 | 好看的av在线 | 无码国产精品一区二区免费16 | 国产精品手机视频 | 九九精品国产 | 少妇超碰 | 欧美日韩极品 | 91福利社在线观看 | 91精品国产免费 | 九九色在线 | 丁香婷婷在线观看 | 伊人伊人 | 任你躁av一区二区三区 | 毛片网 | 女人扒开腿让男人桶爽 | av片在线观看免费 | 成人免费看片&#39; | 日韩a级在线观看 | www男人的天堂 | 久草国产在线视频 | 九九免费在线视频 | 成人精品免费在线观看 | japanese在线观看 | 超碰免费观看 | 国产美女黄网站 | 亚洲成年人免费观看 | 日韩污视频在线观看 | 国产免费美女 | 狠狠噜噜 | 成人小视频在线观看 | 老司机久久精品视频 | 国产浮力第一页 | 免费国产在线视频 | 无码人妻精品丰满熟人区 | 亚洲图片视频小说 | 成 人 黄 色 片 在线播放 | 日本高清不卡一区 | 国产污视频在线播放 | 久久最新精品 | 思思久久99 | 五级黄高潮片90分钟视频 | 吞精囗交69激情欧美 | 天堂少妇 | 岛国二区三区 | 中文字幕有码在线播放 | 精品人妻一区二 | 日本一区二区在线观看视频 | 日韩h在线 | 国产福利不卡视频 | 青青草激情| 亚洲第一在线视频 | 毛片看 | 欧美 丝袜 自拍 制服 另类 | av综合久久 | 国产精品成 | 亚洲熟妇av日韩熟妇在线 | 精品一区二区三区四 |