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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Codeforces 365C - Matrix(hash + yy)

發布時間:2023/12/9 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces 365C - Matrix(hash + yy) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:給定你一個數串s,再給你一個 a ,問你在矩陣d(第i,j個元素為si*sj)有多少個小矩形的和為a

解題思路:可知 ?a = (s[x] + s[x+1] + ....s[y])* (s[p]+s[p+1]+....s[q]); ? ?我們只需要枚舉各字串的和以及其個數就可以得到所求小矩形的個數

解題代碼:

1 #include <stdio.h> 2 #include <string.h> 3 char a[4005]; 4 __int64 b[4005]; 5 __int64 hs[40005]; 6 __int64 sum[4005]; 7 int main() 8 { 9 __int64 k ; 10 scanf("%I64d",&k); 11 scanf("%s",a); 12 memset(hs,0,sizeof(hs)); 13 __int64 len = strlen(a); 14 for(__int64 i= 0 ;i < len ;i ++) 15 { 16 b[i+1] = a[i] - '0'; 17 } 18 sum[0] = 0 ; 19 sum[1] = b[1]; 20 for(__int64 i = 1;i <= len;i ++) 21 sum[i] = sum[i-1] + b[i]; 22 23 for(__int64 i = 0;i <= len;i ++) 24 for(__int64 j = i+1; j<= len ; j ++ ) 25 { 26 hs[sum[j] - sum[i]] ++; 27 } 28 29 // printf("%I64d %I64d\n",hs[0],hs[1]); 30 __int64 ans = 0 ; 31 if(k != 0 ){ 32 for(__int64 i = 1;i <= 40000;i ++) 33 { 34 if(k % i == 0 && (k / i) <= 40000) 35 ans += hs[i] * hs[k/i]; 36 } 37 } 38 else 39 { 40 ans = hs[0] *hs[0]; 41 for(int i = 1 ;i <= 40000;i ++) 42 ans += hs[i]*hs[0]*2; 43 44 } 45 printf("%I64d\n",ans); 46 return 0; 47 } View Code

?

轉載于:https://www.cnblogs.com/zyue/p/3434319.html

總結

以上是生活随笔為你收集整理的Codeforces 365C - Matrix(hash + yy)的全部內容,希望文章能夠幫你解決所遇到的問題。

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