AcWing 2068 整數拼接

2022-06-16 11:18:12 字數 719 閱讀 5718

原題鏈結

考察:列舉 + hash

思路:暴力是直接列舉a[i]與a[j],需要優化省去一重迴圈.我們列舉的a[i],a[j]檢查是否為k倍數時,需要讓a[j]*10t + a[i](t位為a[i]的位數,注意這裡用字串轉換反而不如直接求位數方便).一重迴圈列舉a[i]時,t已知,a[i]已知,剩下的是快速找符合條件的a[j].這裡可以想到同餘,即a[i]%k+a[j]*10t%k == 0.前者已知,我們可以考慮預處理後者.可以用二維陣列儲存每乙個t,a陣列%k的餘數.時間複雜度為10*n.

注意:a[i]與a[j]*10t的餘數相同時,需要將ans-1

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6 typedef long

long

ll;7

const

int n = 100010,m = 11;8

inta[n],h[m][n];

9ll ans;

10int

main()

1124}25

for(int i=1;i<=n;i++)

2632 printf("

%lld\n

",ans);

33return0;

34 }

試題 I 整數拼接

試題 i 整數拼接 給定義個長度為 n 的陣列 a1,a2,an你可以從中選出兩個數 ai 和 aj i 不等於 j 然後將 ai 和 aj 一前一後拼成乙個新的整數。例如 12 和 345 可以拼成 12345 或 34512。注意交換 ai 和 aj 的順序總是被視為 2 種拼法,即便是 ai ...

0906 拼接出最小整數

題目描述 設有n個正整數,將它們聯接成一排,組成乙個最小的多位整數。程式輸入 n個數 程式輸出 聯接成的多位數 例如 n 2時,2個整數32,321連線成的最小整數為 32132,n 4時,4個整數55,31,312,33 聯接成的最小整數為 312313355 題目要求 1.給出偽 即可,請給出對...

試題 J 整數小拼接

給定義個長度為 n 的陣列 a1,a2,an。你可以從中選出兩個數 ai 和 aj i 不等於 j 然後將 ai 和 aj 一前一後拼成乙個新的整數。例如 12 和 345 可 以拼成 12345 或 34512 注意交換 ai 和 aj 的順序總是被視為 2 種拼法,即便 是 ai aj 時。樣例...