1. 程式人生 > >bzoj4915 簡單的數字題

bzoj4915 簡單的數字題

main pan get sed problem opened ati algorithm register

傳送門:http://www.lydsy.com/JudgeOnline/problem.php?id=4915

【題解】

出自第52屆IMO試題第1題。
技術分享

首先第一問一定是4,如果要你證明,我們可以設四個數為a1,a2,a3,a4

不妨令a1<a2<a3<a4

那麽有S=a1+a2+a3+a4

S/2=a1/2+a2/2+a3/2+a4/2

那麽有a3/2+a4/2+a3/2+a4/2>a1/2+a2/2+a3/2+a4/2>S/2,即a3+a4>S/2,顯然這不可能是S的因數。

同理,a2/2+a4/2+a2/2+a4/2>a1/2+a2/2+a3/2+a4/2>S/2,即a2+a4>S/2,顯然也不可能是S的因數。

所以在所有6種組合裏,最多有4種數對滿足條件。

討論當nA=4的情況:

a1+a4和a2+a3一定有一個大於等於S/2

討論a2-a1和a4-a3的大小即可.

也就是說

S/2<=max(a1+a4,a2+a3)

那麽要滿足a1+a4是S的約數,a2+a3是S的約數,就要滿足

a1+a4=a2+a3=S/2

令u=a1+a2,v=a1+a3(u<v)

那麽S=2(a2+a3)=2(u+v-2a1)

所以v|S,即v|2(u+v-2a1),即v|2(u-2a1)

那麽令k=(2u-4a1)/v,k為整數且k>=1

那麽k=2(u/v)-4(a1/v)<2

又k>0,且k為整數且k>=1,故k=1

2(u-2a1)=v

另一邊,有u|2(v-2a1)

那麽就有u|2(2(u-2a1)-2a1)

u|2(2u-6a1)

u|4u-12a1

那麽u|12a1

由於u<v=2u-4a1

所以u>4a1

所以u=6a1或u=12a1

所以集合只有兩種,為S={a1,5a1,7a1,11a1}或S={a1,11a1,19a1,29a1}

暴力做即可

技術分享
# include <stdio.h>
# include <string.h>
# include <iostream>
# include <algorithm>
// # include <bits/stdc++.h>
using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; const int M = 5e5 + 10; const int mod = 1e9+7; # define RG register # define ST static ll l, r; int main() { cin >> l >> r; cout << 4 << endl; ll ans = max(r/11-l+1, 0ll) + max(r/29-l+1, 0ll); cout << ans << endl; return 0; }
View Code

bzoj4915 簡單的數字題