N的倍數 抽屜原理 字首和

2021-08-30 11:32:07 字數 673 閱讀 5179

題目傳送門

題意:

給你n個數,要你從這n個數中選出幾個數,他們的和恰好是n的整數倍。輸出所選數的個數,和數。

思路:

這道題要用到容斥原理。首先,n個數有n個字首和,他們%n的餘數,要麼全部不相同,即0->n-1,這種情況,餘數為0的字首和就是所求的區間。

另外一種情況就是,至少有2個字首和%n的餘數是相同的,那麼他們之間的差值就是n的倍數。他們之間的區間就是所求區間。

教訓:

思考問題時,不能被樣例的答案所侷限,這是設題者的坑。還有不要總是用模擬的思路去思考問題,要將問題轉化與化歸,從變中尋找不變。

ac code:

#includeusing namespace std;

typedef long long ll;

mapmp;

const int maxn = 5e4 + 10;

int sum[maxn];

int a[maxn];

int n = 0;

int main()

return 0;

}mp[sum[i]] = i;

} }

return 0;

}

51nod 1103 N的倍數 (抽屜原理)

乙個長度為n的陣列a,從a中選出若干個數,使得這些數的和是n的倍數。例如 n 8,陣列a包括 2 5 6 3 18 7 11 19,可以選2 6,因為2 6 8,是8的倍數。input 第1行 1個數n,n為陣列的長度,同時也是要求的倍數。2 n 50000 第2 n 1行 陣列a的元素。0 a i...

51nod 1103 N的倍數 抽屜原理

原題鏈結 1103 n的倍數 ural 1302 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 乙個長度為n的陣列a,從a中選出若干個數,使得這些數的和是n的倍數。例如 n 8,陣列a包括 2 5 6 3 18 7 11 19,可以選2 6,因為2 6 8,是8...

51nod1103 抽屜原理 N的倍數

我感覺這種題就是思維。給定n個數,要求取多少個,他們的和為n的倍數。維護字首和。取模有可加性 如果mod等於0,那就從頭到尾輸出。否則的話,n個數的mod 範圍在1 n 1之間,肯定有兩個數的mod一樣,那他們的差值就是結果。n個數,可以再多,但是如果和為x的倍數,這個大於n,那麼就不行了。incl...