P9240 [藍橋杯 2023 省 B] 冶煉金屬 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn)
===============================================================
?參考題解:
#C++3150——藍橋杯2023年第十四屆省賽真題-冶煉金屬(分塊)-Dotcpp編程社區
https://www.bilibili.com/video/BV1wc411x7KU/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=775316543df455e17016d86856ed432d
================================================================
對第一種解法做一個備忘的筆記:
關于一個記錄的最大v和最小v,即
?int max=a/b,min=a/(b+1);
?? ?//對于max這個式子,求出的max肯定是合法的,max如果再大1,a不變(普通金屬總量不變)那么b肯定變小,就不能冶煉出那么多金屬,就不合法了;而min是除以原有冶煉數量+1,得到一個數,這個數肯定是不合法的,但是可以看成是這個冶煉數量(原有冶煉數量+1)的最大v,所以再加上1就是原有冶煉數量的最小值 。
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){int n;cin>>n;int a,b;cin>>a>>b;int max=a/b,min=a/(b+1);//max如果再大,a不變那么b肯定變小,就不能冶煉出那么多金屬,就不合法了;而min是除以原有冶煉數量+1,得到一個數,//這個數肯定是不合法的,但是是這個冶煉數量的最大v,所以再加上1就是原有冶煉數量的最小值 n--;while(n--){cin>>a>>b;if(max>a/b) max=a/b;if(min<a/(b+1)) min=a/(b+1);}cout<<min+1<<" "<<max;return 0;
}