http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1306

解题思路:唬人的水题,只要按照他的意思打,就能过,不过,数组最好开大点。用到优先队列,也可以用栈来处理。

总元素就只有N个,再怎么挪,总个数也不会变化。处理的时候B中的值虽说要加b,但是,不管加成什么样子,最后要放到A里面去的时候还是要变成0,完全不用管它的值有多大。A里面的元素,有要进来的(都是0),有要出去的(大于K),还要每次加a。

所以,我们可以只处理A中得元素,【B中元素的个数】=n-【A中元素个数】。每次处理的时候,要是B中还有元素n-【A中元素个数】>0,就从B中取个元素处理后放到A中(其实就是往A中放个0,因为不管原数是多少,最后都是变成0放进去)。

对于A中得数,每次处理都要加a。要是每次处理都给A中的数全加a,耗时较多。而且,A中得数的值只在判断是否大于k是有效。所以,我们可以用优先队列存储A中的数。每次处理,就拿出队头元素,把它加上从开始处理到现在要加的值(i*a(第i次处理))再判断即可。要是队头元素加上i*a>k,则弹出即可。

对于压入队列的“0”,不要直接压“0”,要处理。压入队的,应该是“相对0”,对于现在,队中所有元素加的a的情况来说,是“0"的值,即“-a*(i-1)”。因为后面轮到它加时,要加i个a,而在它进来的前面的那些要加的a,它不该加,所以要提前“减掉”。

对于处理操作次数时,不能每输入一个数都重头操作一次。我们只要记住【最大的操作次数】,然后把数据从原始数据操作【最大的操作次数】次,其中记录每次操作前的A中的元素的个数即可。最后,只要按照输入的操作次数的顺序输出相关值即可。

40227 20114045007 Accepted
2056
288
C++/Edit 924 B 2013-09-02 11:10:07
#include<stdio.h>
#include<queue>
#include<algorithm>
using namespace std;
int main()
{
int n,k,a,b;
int i,j;
int q,m[205]; //询问次数和询问的情况
int size[405];//A中元素的个数
int f,max1; //输入的原数,询问中处理次数最多的那个次数
while(scanf("%d%d%d%d",&n,&k,&a,&b)!=EOF)
{
max1=0;
priority_queue<int> pq; //优先队列,存储A中数的情况
for(i=0;i<n;i++)
{
scanf("%d",&f);
if(f<=k)pq.push(f); //要是输入的原数情况,小于等于k的放入A中
}
scanf("%d",&q);
for(i=0;i<q;i++) //输入询问情况
{
scanf("%d",&m[i]);
max1=max(max1,m[i]); //记录询问中最大操作次数
}
for(i=1;i<=max1;i++)
{
size[i]=pq.size(); //第i次操作前A中元素个数,【B中元素个数】 = n - 【A中元素个数】
if(n-pq.size()>0)pq.push((i-1)*a*(-1));//B中没有元素的话,就不取;否则取一个"0",加到A中,由于A中所有元素后面都要加i'*a,此时已经加了i*a,所以放进去的元素值应该是
(i-1)*a*(-1)
 while(!pq.empty()&&pq.top()+a*i>k)pq.pop(); //若A中的值加了i*a后大于K,则直接弹出(相当于放入B中)) } for(i=0;i<q;i++) printf("%d\n",n-size[m[i]]); //输出第i次操作前B中元素个数 } return 0;}

												

csu1306: Manor的更多相关文章

  1. CSU1306:Manor(优先队列)

    Description Bob有n个正整数,他将这n个整数根据大小划分成两部分.对于小于等于k的整数放在集合A中,其余的放在集合B中.每次他从集合B中取出一个最大的值,将其变成0放入A集合中.然后将A ...

  2. csu 1306 Manor(优先队列)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1306 1306: Manor Time Limit: 1 Sec  Memory Limit: 1 ...

  3. Manor

    Description Bob有n个正整数,他将这n个整数根据大小划分成两部分.对于小于等于k的整数放在集合A中,其余的放在集合B中.每次他从集合B中取出一个最大的值,将其变成0放入A集合中.然后将A ...

  4. .Net开源Excel、Word操作组件-NPOI、EPPlus、DocX

    一.NPOI 简介: NPOI is the .NET version of POI Java project. With NPOI, you can read/write Office 2003/2 ...

  5. [Machine Learning] 国外程序员整理的机器学习资源大全

    本文汇编了一些机器学习领域的框架.库以及软件(按编程语言排序). 1. C++ 1.1 计算机视觉 CCV —基于C语言/提供缓存/核心的机器视觉库,新颖的机器视觉库 OpenCV—它提供C++, C ...

  6. .Net开源Excel、Word操作组件-NPOI、EPPlus、DocX[转]

    link: http://www.cnblogs.com/jacktang/p/4493760.html 一.NPOI 简介:NPOI is the .NET version of POI Java ...

  7. MVC WebAPI 三层分布式框架开发

    版权声明:本文为博主原创文章,未经博主允许不得转载. 前言:SOA(面向服务的架构)是目前企业应用开发过程中普遍采用的技术,基于MVC WebAPI三层分布式框架开发,以此适用于企业信息系统的业务处理 ...

  8. <转>JDBC获取DB元数据

    原文链接:http://jiauwu.iteye.com/blog/1307617 package com.util.jdbc; import java.sql.Connection; import ...

  9. [转载]SOAPUI压力测试的参数配置

    原文地址:SOAPUI压力测试的参数配置作者:goooooodlife The different Load Strategies available in soapUI and soapUI Pro ...

随机推荐

  1. [置顶] MongoDB 分布式操作——分片操作

    MongoDB 分布式操作——分片操作 描述: 像其它分布式数据库一样,MongoDB同样支持分布式操作,且MongoDB将分布式已经集成到数据库中,其分布式体系如下图所示: 所谓的片,其实就是一个单 ...

  2. VS2010/MFC说明

    此栏目大多数内容转自鸡啄米http://www.jizhuomi.com/ 方便使用对其内容做了少量修改,仅是个人收藏使用,不做其它用途.

  3. poj 3356 AGTC(线性dp)

    题目链接:http://poj.org/problem?id=3356 思路分析:题目为经典的编辑距离问题,其实质为动态规划问题: 编辑距离问题定义:给定一个字符串source,可以对其进行复制,替换 ...

  4. SPOJ1811最长公共子串问题(后缀自动机)

    题目:http://www.spoj.com/problems/LCS/ 题意:给两个串A和B,求这两个串的最长公共子串. 分析:其实本题用后缀数组的DC3已经能很好的解决,这里我们来说说利用后缀自动 ...

  5. 未能加载文件或程序集“DAL”或其他的某一个依赖项,系统找不到指定的文件

    针对这个问题我在敲VB.NET机房收费系统的时候总共出现了两次,第一次是在使用反射+抽象工厂的时候出现的,第二次是在使用VS2012自带的打包工具生成可执行文件执行exe文件的时候出现的.具体看下图: ...

  6. p2.js物理引擎学习

    P2简介 P2是一款基于Javascript编写的HTML5 2D物理引擎,和Box2D.Nape等2D物理引擎一样,P2集成了各种复杂的物理公式和算法,可以帮助我们轻松的实现碰撞.反弹等物理现象的模 ...

  7. 谁动了我的CurrentPrincipal?解释一下为什么CurrentPrincipal变了,并解决这个问题。

    在上一篇博客中我遇到了一个问题,并且导致了我无法继续进行授权和验证.经过查阅资料和解决另外一个问题的过程,我突然想通了为什么CurrentPrincipal变了.并且经过验证后的确是我所理解的那样.下 ...

  8. 记一次排查log4net 不输出日志的解决过程

    最近发现log4net 不输出日志了,重点排查几个地方,发现都没有问题. 1.[assembly: log4net.Config.XmlConfigurator(ConfigFile = " ...

  9. MAVEN入门(二)

    一.IDEA+MAVEN+Tomcat7 创建一个简单的Web app 1.用IDEA创建一个maven项目 注意: 红色部分一定要自己手选本地配置好的maven_home的地址,否则IDEA会选用内 ...

  10. OC中属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?

    此次只做简单说明,不做代码演示! 1> readwrite:同时生成get方法和set方法的声明和实现 2> readonly:只生成get方法的声明和实现 3> assign:se ...