zoukankan      html  css  js  c++  java
  • 网易笔试编程题

    /*时间限制:1秒
    空间限制:262144K
    又到了丰收的季节,恰逢小易去牛牛的果园里游玩。
    牛牛常说他对整个果园的每个地方都了如指掌,小易不太相信,所以他想考考牛牛。
    在果园里有N堆苹果,每堆苹果的数量为ai,小易希望知道从左往右数第x个苹果是属于哪一堆的。
    牛牛觉得这个问题太简单,所以希望你来替他回答。

    输入描述:
    第一行一个数n(1 <= n <= 105)。
    第二行n个数ai(1 <= ai <= 1000),表示从左往右数第i堆有多少苹果
    第三行一个数m(1 <= m <= 105),表示有m次询问。
    第四行m个数qi,表示小易希望知道第qi个苹果属于哪一堆。

    输出描述:
    m行,第i行输出第qi个苹果属于哪一堆。

    输入例子1:
    5
    2 7 3 4 9
    3
    1 25 11

    输出例子1:
    1
    5
    3*/

    #include<iostream>
    #include<vector>
    #include <numeric>
    using namespace std;
    int main()
    {
     int n = 0, m = 0;
     int ai_temp, qi_temp,sum=0;
     cin >> n;
     vector<int>ai, sumi;
     sumi.push_back(0);
     while (n--)
     {
      cin >> ai_temp;
      ai.push_back(ai_temp);
      sum = sum + ai_temp;
      sumi.push_back(sum);
     }
     /*for (size_t i = 0; i <= sumi.size(); i++)
      cout << sumi[i]<<endl;*/
     cin >> m;
     vector<int>qi(m);
     while (m--)
     {
      cin >> qi_temp;
      qi.push_back(qi_temp);
     }
     /*for  (int i= ai.size()-1; i >=0; i--)
     {
      int sum=accumulate(ai.begin(),ai.end()-i,0);
      sumi.push_back(sum);
     }*/
     for (size_t i = 0; i < qi.size(); i++)
     {
      int l = 1, r = sumi.size();
      while (l <= r)
      {
       int mid = (l + r) / 2;
       if ((qi[i] > sumi[mid - 1]) && (qi[i] <= sumi[mid]))
       {
        cout << mid << endl;
        break;
       }
       else if (qi[i] <= sumi[mid - 1])
       {
        r = mid - 1;
       }
       else
        l = mid + 1;
      }
     }
     return 0;
    }

  • 相关阅读:
    [COCI20142015#1] Kamp
    [CEOI2007]树的匹配Treasury
    [JLOI2016/SHOI2016]侦察守卫
    [POI2015]MOD
    [BJOI2017]机动训练
    [九省联考2018]一双木棋chess
    [清华集训2012]串珠子
    [POI2014]ZALFreight
    [SHOI2009]舞会
    [COCI2019]Mobitel
  • 原文地址:https://www.cnblogs.com/Rakint/p/9619921.html
Copyright © 2011-2022 走看看