题解 | #丰收-二分查找#

丰收

http://www.nowcoder.com/practice/83b419c027fa490aa60669b0e7dc06a3

#include<vector>

using namespace std;
int main(void)
{
    int n;
    cin>>n;
    
    vector<int> a(n+1,0);
    
    a[0] = 0;
    
    for(int i=1;i<=n;i++)
    {
        int tmp;
        cin>>tmp;
        a[i]+=a[i-1]+tmp;
    }
    
    int m;
    cin>>m;
    
     vector<int> q(m,0);
    
    for(int i=0;i<m;i++)
        cin>>q[i];
        
    for(int j=0;j<m;j++)
    {
        int left = 1;
        int right = n;
        
        
        while(left<=right)
        {
            int mid = left + (right-left)/2;

           // cout<<"q[j]:"<<q[j]<<" mid:"<<mid<<endl;
            
            if(q[j]<=a[mid]&&(mid==1||mid==n||q[j]>a[mid-1]))
            {
                
                cout<<mid<<endl;
                break;
            }
            else if(q[j]<a[mid])
            {
                right = mid - 1;
            }
            else if(q[j]>a[mid])
            {
                left = mid + 1;
            }

        }
        
        /*
        for(int i=1;i<=n;i++)
        {
            if(q[j]<=a[i])
            {
                cout<<i<<endl;
                break;
            }
            
        }
        */
    }
        
        return 0;
}
全部评论

相关推荐

投递长鑫存储等公司8个岗位
点赞 评论 收藏
分享
Twilight_m...:经典我朋友XXXX起手,这是那种经典的不知道目前行情搁那儿胡编乱造瞎指导的中年人,不用理这种**
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务