楼主: 
oin1104 (是oin的说)   
2024-02-08 19:17:05https://leetcode.com/problems/successful-pairs-of-spells-and-potions/
今天的做过惹
来做个别的
题目:
给你一串spells跟potions 还有success
问你某个spells乘上全部potions
会大于success的有几个
举例比较好说明= =
举例:
spells 是 3,1,2
potions 是 1,2,3,4,5
success 是 10
这样对于spells的3来说
乘起来会变 3,6,9,12,15
12 15超过success  所以有两个
对spells的1
乘起来会变 1,2,3,4,5
一个都没有
对spells的2
乘起来会变 2,4,6,8,10
10刚好 所以有一个
解法:
对每个spells[i]去对potions二分搜
然后就好了
对ㄚ
二份搜真的很靠北
不管是手刻还是用他的函式
都要知道他什么时候停下来要拿什么东西
很烦
```cpp
class Solution {
public:
    vector<int> successfulPairs(vector<int>& spells, vector<int>& potions, long
long success)
    {
        sort(potions.begin() , potions.end() , less<int>() );
        // for(int k : potions)
        // {
        //     printf("%d ",k);
        // }
        // printf("\n============\n");
        int len = spells.size();
        int lenp = potions.size();
        vector<int> res(len , 0);
        for(int si = 0 ; si < len ; si ++)
        {
            int l = 0;
            int r = lenp-1;
            int m = 0 ;
            while(l <= r)
            {
                m = (l+r)/2 ;
                long long ress = ((long long)potions[m] * (long long)spells[si])
;
                // printf("%d = %d * %d , l:%d r:%d \n",ress,potions[m],spells[s
i],l,r);
                if(ress < success)
                {
                    l = m+1;
                }
                else if (ress >= success)
                {
                    r = m-1;
                }
            }
            // printf("l:%d r:%d\n",l,r);
            // printf("============\n");
            res[si] = (lenp) - l;
        }
        return res;
    }
};
```