笔记

如果要将两个for嵌套循环的值每个都相加,例如

for(int i = 0;i < n;i++)
    {
        for(int j = 0;j < n;j++)
        {
            k[i * n + j] = k[i] + k[j];
//            cout << l * n + p << " ";
        }
    }

每个相加一遍,总共需要相加n的二次方次,如果要将值存入另外一个数组中,那么这个数组k的每个下标应该即为i*n+j,也就是0,1,2,...,n,这样就可以实现两个数组的相关操作有序的存到一个数组中。

题目:

 

 

STL中二分函数的使用

#include<iostream>
#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n,m,k[50],temp[500];
    cin >> n >> m;
    for(int i = 0;i < n;i++)
        cin >> k[i];
    
    for(int l = 0;l < n;l++)
    {
        for(int p = 0;p < n;p++)
        {
            temp[l * n + p] = k[l] + k[p];
//            cout << l * n + p << " ";
        }
    }
    sort(temp,temp + n * n);
    int flag = 0;
    for(int i = 0;i < n;i++)
    {
        for(int j = 0;j < n;j++)
        {
            if(binary_search(temp,temp + n * n,m - k[i] - k[j]))
            {
                flag = 1;
            }
        }
    }
    if(flag == 1)
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
    
    return 0;
}

在其他人的博客中看到的STL二分函数的一些总结,如下:

1. binary_search(arr[],arr[]+size , index)

二分查找,其中,arr[] 表示数组首地址,size表示元素个数,index则表示查找的元素,首要的一点是数组必须是有序的,并且一定是从小到大的,非递减的。可以看出 size 和sort 等函数的使用方法都是一样的,都是到最后元素的下一位

2. lower_bound(arr[],arr[]+size,index)

查找在范围内大于或等于index的数组元素中第一个元素的地址,相当于一个指针值

3.upper_bound(arr[],arr[]+size,index)

查找在范围内大于index的数组元素中第一个元素的地址,相当于一个指针值。暂时还没找到找出第一个小于index的数组元素的函数。

 

posted @ 2019-11-11 09:59  恶魔岛  阅读(151)  评论(0编辑  收藏  举报