zoukankan      html  css  js  c++  java
  • PAT (Advanced Level) 1044 Shopping in Mars

    题解

      利用前缀和维护钻石的价值,然后枚举左端点,二分查找右端点。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,pre_sum[100005];
    vector<int> ans;
    void check(int i,int &j,int &check);
    int main()
    {
        int i,j,mmin,result;
        scanf("%d%d",&n,&m);
        for(i=1;i<=n;i++)
        {
            scanf("%d",&pre_sum[i]);
            pre_sum[i]+=pre_sum[i-1];
        }
        for(i=1,mmin=pre_sum[n];i<=n;i++)
        {
            check(i,j,result);
            if(result>mmin) continue;
            if(result>=m)
            {
                if(result<mmin)
                {
                    ans.clear();
                    mmin=result;
                }
                ans.push_back(i);
                ans.push_back(j);
            } 
        }
        for(i=0;i<ans.size()-1;i+=2)
            printf("%d-%d
    ",ans[i],ans[i+1]);
        system("pause");
        return 0;
    }
    void check(int i,int &j,int &result)
    {
        int left=i,right=n,mid;
        while(left<=right)
        {
            mid=(left+right)/2;
            if(pre_sum[mid]-pre_sum[i-1]>=m) j=mid,right=mid-1;
            else left=mid+1;
        }
        result=pre_sum[j]-pre_sum[i-1];
    }
  • 相关阅读:
    SSH-框架工作笔记
    Ajax基础
    Hibernate基础
    Struts1 中的国际化
    MyEclipse中的快捷键
    Oracle_存储过程
    oracle_开发子程序和包
    常用的正则表达式
    jQuery中的事件
    AcWing 1118. 分成互质组
  • 原文地址:https://www.cnblogs.com/VividBinGo/p/12238003.html
Copyright © 2011-2022 走看看