题解:CF2170C Quotient and Remainder
20090818Cc
·
·
题解
转化:
$\therefore x=q_i\times y+r_j ,r_j\in[0,y)$。
由于瓶颈在于 $1\le y<x\le k$。 \
又考虑取最多,所以 $y=r_j+1$。
## 做法:
对 $q,r$ 排序,从最大的 $q_i$ 开始搭配最小的 $r_j$,如果无法满足,取下一个 $q_i$ 再试。当 $r_j\ge k$ 或者取空时结束。
复杂度在于排序 $O(n\log n)$。
## 正确性:
由于 $y$ 固定了从小到大,所以从最大的 $q_i$ 开始贪心可以得到最优解。
## 代码:
```
int T=read(),n,k,ans;
priority_queue<int,vector<int>,less<int>>q1;//q 从大到小
priority_queue<int,vector<int>,greater<int>>q2;//r 从小到大
inline void work(){
n=read();k=read();ans=0;//清空
wl(!q1.empty())q1.pop();wl(!q2.empty())q2.pop();
rep(i,1,n,1) q1.push(read());rep(i,1,n,1) q2.push(read());
wl(!q1.empty()&&!q2.empty()){
//直接得x,y
int q=q1.top(),r=q2.top(),y=r+1,x=q*y+r;
if(y>k)break;q1.pop();
if(x>k) continue;
//合法
q2.pop();ans++;
}
wr(ans),pr(10);
}
signed main(){
wl(T--) work();
return 0;
}
```