C++整數(shù)拼接技巧大揭秘
問題描述:
給定一個(gè)長(zhǎng)度為n的數(shù)組,A1,A2,...,An你可以從中選出兩個(gè)數(shù)Ai和Aj(i≠j),然后將Ai和Aj一前一后拼成一個(gè)新的整數(shù)。例如12和345可以拼成12345或34512。注意交換Ai和Aj的順序總是被視為兩種拼法,即便Ai=Aj。請(qǐng)你計(jì)算有多少種拼法,滿足拼出的整數(shù)就是k的倍數(shù)。
輸入格式:
第一行包含兩個(gè)整數(shù)n和k。
第二行包括n個(gè)整數(shù)A1,A2,...,An。
輸出格式:
一個(gè)整數(shù),代表答案。
例如輸入:4 2
1 2 3 4
輸出:6
規(guī)定:
對(duì)于30%的評(píng)測(cè)用例,1≤n≤1000,1≤K≤20,1≤Ai≤10^4
對(duì)于所有評(píng)測(cè)用例:1≤n≤10^5,1≤K≤10^5,1≤Ai≤10^9
分析:
拼接兩個(gè)整數(shù)(如12和345),得到12×1000+345=12345或345*100+12=34512。因此可以得到一個(gè)數(shù)學(xué)等式:拼起來的值為Ai×10^len(Aj)+Aj。
固本題要求滿足以下等式的Ai和Aj組合:(Ai×10^len(Aj)+Aj)%K=0-->((Ai×10^len(Aj))%K+Aj%K)%K=0
該式中,將計(jì)算拆分成兩部分:Q=(Ai×10^len(Aj))%K和P=Aj%K。
(Q+P)%K=0-->Q=(K-P)%K
Q:有兩個(gè)未知量Ai的值和Aj的長(zhǎng)度。
P:有一個(gè)未知量Aj的值。
當(dāng)確定Aj時(shí)就可以確定P,通過P的值與K的值,就可以通過Q=(K-P)%K得到Q的值。
結(jié)論:當(dāng)確定Aj時(shí),就可以確定Q和Aj的長(zhǎng)度,此時(shí)只需要查看有多少個(gè)Ai可滿足即可。
C++程序:
#include<iostream> #include<string> using namespace std; typedef long long LL; const int N=100010; int s[11][N];//表示某個(gè)數(shù)*10^i%k==j的數(shù)量 int n;//表示將要輸入的n個(gè)數(shù) LL a[N];//存放n個(gè)數(shù) int k;//表示k倍 LL res;//表示結(jié)果 int main() { cin>>n>>k; for(int i=0;i<n;i++) { cin>>a[i]; } for(int i=0;i<n;i++) { LL t=a[i]%k; for(int j=0;j<11;j++) { s[j][t]++; t=t*10%k; } } for(int i=0;i<n;i++) { LL t=a[i]%k; int len=to_string(a[i]).size(); res+=s[len][(k-t)%k]; LL r=t; while(len--) { r=r*10%k; } if(r==(k-t)%k) { res--; } } cout<<res<<endl; return 0; }
此題比較考腦子(較難),可以用偽C或自然語言舉幾個(gè)例子,方便弄懂!
到此這篇關(guān)于C++整數(shù)拼接技巧大揭秘的文章就介紹到這了,更多相關(guān)C++ 整數(shù)拼接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C++中string使用+號(hào)與int拼接方式
- 詳解C++?OpenCV實(shí)現(xiàn)圖像拼接的原理及方法
- C++ OpenCV實(shí)戰(zhàn)之圖像全景拼接
- C++實(shí)現(xiàn)批量圖片拼接
- 使用c++實(shí)現(xiàn)OpenCV圖像橫向&縱向拼接
- 基于C++的攝像頭圖像采集及拼接程序的簡(jiǎn)單實(shí)現(xiàn)
- C++ 兩個(gè)vector對(duì)象拼接方式
- C++字符串拼接效率對(duì)比(+=、append、stringstream、sprintf)
- 關(guān)于c++11與c風(fēng)格路徑拼接的速度對(duì)比
- C++使用join拼接字符串的技巧
相關(guān)文章
QT實(shí)現(xiàn)制作一個(gè)ListView列表的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何使用Qt制作一個(gè)ListView,點(diǎn)擊ListView的Item可以用于測(cè)試OpenCV的各種效果,感興趣的小伙伴可以了解一下2023-02-02C++實(shí)現(xiàn)動(dòng)態(tài)綁定代碼分享
對(duì)于C++動(dòng)態(tài)綁定的理解,就是編譯器用靜態(tài)分析的方法加上虛擬函數(shù)的設(shè)計(jì)實(shí)現(xiàn)在程序運(yùn)行時(shí)動(dòng)態(tài)智能執(zhí)行正確虛擬函數(shù)的技術(shù)。要徹底理解動(dòng)態(tài)綁定,只需要掌握兩點(diǎn),一是編譯器的靜態(tài)編譯過程,二是虛擬函數(shù)的基本知識(shí)。只要有了這兩點(diǎn)理解,任何動(dòng)態(tài)綁定的分析都是很容易的2015-11-11C++簡(jiǎn)明講解類型轉(zhuǎn)換的使用與作用
類型轉(zhuǎn)換(type?cast),是高級(jí)語言的一個(gè)基本語法。它被實(shí)現(xiàn)為一個(gè)特殊的運(yùn)算符,以小括號(hào)內(nèi)加上類型名來表示,接下來讓我們一起來詳細(xì)了解2022-04-04C++標(biāo)準(zhǔn)庫bitset類型的簡(jiǎn)單使用方法介紹
這篇文章主要介紹了C++標(biāo)準(zhǔn)庫bitset類型的簡(jiǎn)單使用方法,需要的朋友可以參考下2017-07-07C語言通過二分查找實(shí)現(xiàn)猜數(shù)字游戲
這篇文章主要為大家詳細(xì)介紹了在C語言中如何通過二分查找思想編寫一個(gè)簡(jiǎn)單的猜數(shù)字游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-02-02C++實(shí)現(xiàn)LeetCode(70.爬樓梯問題)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(70.爬樓梯問題),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07