2129. 礼物
題目描述
圣誕節這天,某商店準備了N個禮品盒,分別用整數1-N進行編號。其中,編號為1的盒子中有一個糖果,編號為2的盒子中有2個糖果,。。。編號為N的盒子中有N個糖果。這天一早,中山幼兒園的K個小朋友一起來到這間商店。作為當天的第一批顧客,這些小朋友可以從這N個禮品盒中選出兩個拿走。小朋友們商量了一會兒后決定,他們拿走的糖果并不一定要多,但是一定要能夠剛好平分給每個人。即拿走的兩個盒子中的糖果總數一定要使K的倍數。現在他們想知道一共有多少種方案可供選擇。
輸入
每行兩個正整數N和K,其中1<=N<= 1 0 9 10^9 109, 1 < = K < = 1 0 9 1<=K<=10^9 1<=K<=109。一行N=K=0
表示輸入結束,這一行不用處理。
輸出
對輸入中除了N=K=0外的每一行,輸出一行,這一行只有一個數,即其相對應的輸入所得到的方案數。
數據范圍限制
20%的數據N<=100;
80%的數據K<=1000;
每個輸入文件最多有200行輸入數據。
Code
20分
#include<iostream> #include<stdio.h> #pragma GCC optimize (3) using namespace std; int main() {//freopen("gift.in","r",stdin);//freopen("gift.out","w",stdout);long long n,k;long long ans;long long sum;for(;;){cin >> n >> k;if(n != 0 && n != 1){ans = 0;for(register long long i = 1;i <= n;i++)for(register long long j = n;j >= i + 1;j--){sum = i + j;if(sum % k == 0 && sum != 1)ans++;}cout << ans << endl;}else if(n == 1)cout << 0 << endl; else break;}return 0; }100分
#include<cstdio> #include<iostream> using namespace std; long long n,m,x,y,c,s; int main() {freopen("gift.in","r",stdin);freopen("gift.out","w",stdout);for(;;){cin >> n >> m;if(n && m){x = n / m;y = n % m;c = (m - 1) / 2;s = x * (x - 1) / 2 + x * x * c;if(m % 2 == 0)s += x * (x - 1) / 2;if(y > 0){if(y >= c)s = s + x * c;elses = s + x * y;y -= c;if(y > 0 && m % 2 == 0){s = s - x * (x - 1) / 2 + x * (x + 1) / 2;y--;}}if(y > 0)s += (x + 1) * y;cout << s << endl;}elsebreak;} }總結
- 上一篇: 如何改变字体大小呢?
- 下一篇: 虹科为您介绍如何实现多相机同步技术