zoukankan      html  css  js  c++  java
  • stone

    这道题我最开始数组开小了......

    废话少说,进入正题

    题目描述

    WHM摆了N堆石子,他有点累,不想合并这些石子,所以他问了ZYC一个非常简单的问题:从左往右数第k个石子在哪一堆里?现在ZYC把这个问题分享给大家一起开心开心。

    输入

    输入第一行是一个数N,表示石子堆数。

    第二行N个用空格隔开的数ai,表示从左往右第i堆有多少个石子。

    第三行是一个数M,表示有M次询问。

    第四行M个用空格隔开的数qi,表示WHM希望知道第qi个石子属于哪一堆。

    输出

    输出共有M行,每一行表示第qi个石子属于哪一堆。

    样例输入

    5 2 7 3 4 9 3 1 25 11

    样例输出

    1 5 3

    提示

    对于100%的数据,1<=N<=10^6 1<= M <=10^5 1<=ai<=1000。

    题解:一个二分,简单至极,(如果我的话伤害到了你,恳请原谅......),直接给代码吧,但是,注意必须用二分!!!否则时间超限!!!

    代码如下:

    #include<cstdio>
    #include<iostream>
    using namespace std;
    int a[1000005];
    int sum[1000005];
    int ask[100005];
    int main()
    {
    	//freopen("stone.in","r",stdin);
    	//freopen("stone.out","w",stdout);
    	int n;
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d",&a[i]);
    		sum[i]=sum[i-1]+a[i];
    	}
    	int m;
    	cin>>m;
    	for(int i=1;i<=m;i++)
    	{
    		int p;
    		scanf("%d",&p);
    		int l=1,r=n;
    		while(l<r)
    		{
    			int mid=(l+r)/2;
    			if(p<=sum[mid])
    			{
    				r=mid;
    			}
    			else
    			{
    				l=mid+1;
    			}
    		}
    		printf("%d
    ",l);
    	}
    	return 0;
    }
    
  • 相关阅读:
    [React]核心概念
    [算法]复杂度分析
    [算法]移除指定元素&strSr()的实现
    [算法]合并链表&删除数组重复项
    php _weakup()反序列化漏洞
    Java 注解详解
    MyBatis入门
    Spring 事务管理
    Spring AOP
    Spring JDBC
  • 原文地址:https://www.cnblogs.com/chen-1/p/9480150.html
Copyright © 2011-2022 走看看