簡體   English   中英

由於時間限制,我的代碼未通過測試,如何減少代碼工作所需的時間?

[英]My code is failing a test due to time limit restriction, how do I decrease the time taken by my code to work?

問題 - 給你兩個正整數 a 和 b。 在一個動作中,您可以將 a 增加 1(將 a 替換為 a+1)。 你的任務是找出你需要做的最小移動次數,以使 a 可以被 b 整除。 有可能,您必須進行 0 次移動,因為 a 已經可以被 b 整除。 你必須回答 t 個獨立的測試用例。

輸入 - 輸入的第一行包含一個 integer t (1≤t≤10^4) — 測試用例的數量。 然后是 t 個測試用例。

測試用例的唯一一行包含兩個整數 a 和 b (1≤a,b≤10^9)。

Output - 為每個測試用例打印答案 - 為了使 a 可被 b 整除,您需要執行的最小移動次數。

代碼強制問題鏈接 - https://codeforces.com/problemset/problem/1328/A

時間限制 - 每個測試用例 1 秒

我的代碼 -

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    long long t,a,b,x;
    cin >> t;
    for(long long i=0;i<t;i++){
        cin >> a >> b;
        x = a;
        while(a%b!=0){
            a++;
        }
        cout << a-x << endl;
    }
}

當測試用例數量為 10000 並且輸入數量很大時,它會失敗。 我可以做些什么來減少我的代碼的執行時間?

您需要找到 m 使得 a + m = kb 且 0≤m<b (您想要下一個倍數)。 如果我們將方程除以 b,我們有 (a + m)/b = k,這也是 k = 上限(a/b)。

所以 m = 天花板(a/b)b - a。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM