A题: 输入n,从下面n个数中找出min到max值之间缺失数的数量。直接边输入边判断,目的求出max值和min值最后和n比较就可。
代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int min=1e9;int max=-1;
int n;cin>>n;
for(int i=1;i<=n;i++){
int a;cin>>a;
if(a>max)max=a;
if(a<min)min=a;
}
int ans=max-min-n+1;
if(ans>=0)cout<<ans<<endl;
else cout<<"0"<<endl;
return 0;
}
B题: 输入nmab,在a:b最简整数比状况下,求出nm的范围内最多有多少a/b组合,很明显,最优解取决于n/a和m/b的最小值。(这里的a和b是已经化简到最简整数比的ab,求个最大公约数问题)for循环倒着推可能会TLE,o(n)–>1e18
代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll perform(ll x,ll y){
ll tmp;
while(x%y!=0){
tmp=x%y;x=y;y=tmp;
}
return y;
}
int main(){
ll n,m,a,b;
cin>>n>>m>>a>>b;
ll x=a,y=b;
ll re=perform(x,y);
a/=re;b/=re;
ll ans=min((n/a),(m/b));
cout<<ans<<endl;
return 0;
}