2 条题解
-
0
由于必须用两根相等的红色和一根蓝色,因为蓝色+红色一定大于红色,我们只需要考虑两根红色的长度是否大于蓝色(必须满足三角形不等式);那么就是2*a[l]>b[r] 如果不满足,l++ , 否则配对
#include<bits/stdc++.h> using namespace std; #define int long long int n; int a[200100],b[200100]; signed main(){ cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++)cin>>b[i]; sort(a+1,a+n+1); sort(b+1,b+n+1); int ans=0; int l=1,r=1; while(l<=n&&r<=n){ if(2*a[l]>b[r]){ //cout<<"debug"<<a[l]<<" "<<b[r]<<endl; ans++; l++; r++; } else l++; } cout<<ans; } -
0
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll T=1;const ll N=2e5+5; ll n,x,y; ll pre[N];ll a[N];ll ans=0;ll k;ll b[N]; void solve(){ cin>>n;for(ll i=1;i<=n;++i){ cin>>a[i];a[i]=a[i]*2; } for(ll i=1;i<=n;++i)cin>>b[i]; sort(a+1,a+1+n);sort(b+1,b+1+n); ll l=1;ll r=1; while(l<=n&&r<=n){ if(a[l]-b[r]>0){ ans+=1;r++;l++; }else{ l++; } }cout<<ans; } int main(){ while(T--)solve(); return 0; }
- 1
信息
- ID
- 15
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 193
- 已通过
- 78
- 上传者