第五屆“傳智杯”全國(guó)大學(xué)生計(jì)算機(jī)大賽初賽B題B-蓮子的機(jī)械動(dòng)力學(xué)-創(chuàng)新互聯(lián)

先上題目:
題目描述

題目背景的問題可以轉(zhuǎn)化為如下描述:

創(chuàng)新互聯(lián)建站于2013年開始,先為雁塔等服務(wù)建站,雁塔等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為雁塔企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

給定兩個(gè)長(zhǎng)度分別為?n,m?的整數(shù)?a,b,計(jì)算它們的和。

但是要注意的是,這里的?a,b?采用了某種特殊的進(jìn)制表示法。最終的結(jié)果也會(huì)采用該種表示法。具體而言,從低位往高位數(shù)起,第?i位采用的是?i+1?進(jìn)制。換言之,相較于十進(jìn)制下每一位的「逢?10進(jìn)?1」,該種進(jìn)制下第?i?位是「逢?i+1?進(jìn)?1」。

下圖所示,左邊是十進(jìn)制的豎式加法;右邊是這種特殊進(jìn)制的豎式加法。圖中的紅色加號(hào)表示上一位發(fā)生了進(jìn)位。

輸入格式
  • 第一行有兩個(gè)整數(shù)?n,m,分別表示?a和?b的位數(shù)。
  • 第二行有?n?個(gè)整數(shù),中間用空格隔開,從高到低位描述?a?的每個(gè)數(shù)碼。
  • 第三行有?m?個(gè)整數(shù),中間用空格隔開,從高到低位描述?b?的每個(gè)數(shù)碼。
輸出格式
  • 輸出有若干個(gè)整數(shù),從高到低位輸出?a+b?在這種特殊表示法下的結(jié)果。
輸入輸出樣例

輸入

5 4
3 3 2 1 1
3 2 2 1

輸出

4 2 1 1 0

輸入?

10 1
10 9 8 7 6 5 4 3 2 1
0

輸出?

10 9 8 7 6 5 4 3 2 1
說明/提示

對(duì)于全部數(shù)據(jù),保證?1≤n,m≤2×10^5,從低位往高位數(shù)起有ai?∈[0,i],bi?∈[0,i]。請(qǐng)使用 Java 或 Python 語(yǔ)言作答的選手注意輸入輸出時(shí)的效率。

個(gè)人思路:

第一眼看見這個(gè)題目,腦子里想出來的就是高精度加法的模板。


但這個(gè)題很有意思,逢i+1進(jìn)1,所以我們還需要在進(jìn)位上做些文章。

2022.11.29個(gè)人優(yōu)化后的代碼:

#include#include#includeusing namespace std;
int main()
{
    int n,m;
    scanf("%d %d", &n, &m);
    dequea, b,c;
    for (int i = 0; i< n; i++)
    {
        int t;
        scanf("%d", &t);
        a.push_front(t);
    }
    for (int i = 0; i< m; i++)
    {
        int t;
        scanf("%d", &t);
        b.push_front(t);
    }
    
    int t = 0; int count = 2;
    for (int i = 0; i=0; i--)
        printf("%d ", c[i]);
    return 0;

}

2022.11.26個(gè)人的原代碼:??

#include#include#includeusing namespace std;
int main()
{
    int n,m;
    scanf("%d %d", &n, &m);
    dequea, b,c;
    for (int i = 0; i< n; i++)
    {
        int t;
        scanf("%d", &t);
        a.push_front(t);
    }
    for (int i = 0; i< m; i++)
    {
        int t;
        scanf("%d", &t);
        b.push_front(t);
    }
    if (n >m)
    {
        int t = 0; int count = 2;
        for (int i = 0; i=0; i--)
        printf("%d ", c[i]);
    return 0;

}
代碼分析:
我們來分析一下改進(jìn)后的代碼: 一.數(shù)據(jù)的輸入:
int n,m;
    scanf("%d %d", &n, &m);
    dequea, b,c;
    for (int i = 0; i< n; i++)
    {
        int t;
        scanf("%d", &t);
        a.push_front(t);
    }
    for (int i = 0; i< m; i++)
    {
        int t;
        scanf("%d", &t);
        b.push_front(t);
    }

輸入

5 4
3 3 2 1 1
3 2 2 1

1.考慮到數(shù)據(jù)范圍,我選擇用容器來存儲(chǔ)。

2.由于題目將n和m的每一位數(shù)都分開,用字符串string進(jìn)行第一次存儲(chǔ)過于麻煩,所以我選擇直接用一個(gè)變量t進(jìn)行第一次存儲(chǔ),再將t頭插到deque容器。

3.為什么用deque容器?他能頭插,我也考慮過用vector尾插,但判斷條件的范圍把握不好,所以選擇deque進(jìn)行頭插。

二:進(jìn)位相加:
int t = 0; int count = 2;
//t用來存儲(chǔ)進(jìn)位,count當(dāng)做進(jìn)制。
    for (int i = 0; i

輸入

5 4
3 3 2 1 1
3 2 2 1

這是t沒有多出的情況

來看看t多出的情況

?三:輸出數(shù)據(jù):
int len = c.size();
    for (int i = len-1; i >=0; i--)
        printf("%d ", c[i]);

由于我是用尾插,將數(shù)據(jù)存入c容器中,所以輸出要倒著來,從容器的末尾開始輸出。

總結(jié):

個(gè)人能力水平有限,比賽中只做出來AB兩題,文中若有錯(cuò)誤,還請(qǐng)指出,如有疑問,歡迎留言。(比賽網(wǎng)站卡到讓人血怒,交半天交不上去)

2022/11/29 12:18

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:第五屆“傳智杯”全國(guó)大學(xué)生計(jì)算機(jī)大賽初賽B題B-蓮子的機(jī)械動(dòng)力學(xué)-創(chuàng)新互聯(lián)
本文地址:http://bm7419.com/article34/cdicse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、做網(wǎng)站軟件開發(fā)、定制網(wǎng)站、服務(wù)器托管企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)