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

先上題目:
題目描述

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

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

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

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

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

輸入格式
  • 第一行有兩個整數(shù)?n,m,分別表示?a和?b的位數(shù)。
  • 第二行有?n?個整數(shù),中間用空格隔開,從高到低位描述?a?的每個數(shù)碼。
  • 第三行有?m?個整數(shù),中間用空格隔開,從高到低位描述?b?的每個數(shù)碼。
輸出格式
  • 輸出有若干個整數(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
說明/提示

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

個人思路:

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


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

2022.11.29個人優(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個人的原代碼:??

#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;

}
代碼分析:
我們來分析一下改進后的代碼: 一.數(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ù)范圍,我選擇用容器來存儲。

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

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

二:進位相加:
int t = 0; int count = 2;
//t用來存儲進位,count當(dāng)做進制。
    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é):

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

2022/11/29 12:18

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

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

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

廣告

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