題目傳送門
題意:
給你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...