博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
math --- CSU 1554: SG Value
阅读量:6594 次
发布时间:2019-06-24

本文共 1274 字,大约阅读时间需要 4 分钟。

 SG Value

Problem's Link:   http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1554


 

Mean: 

一个可重集合,初始为空,每次插入一个值,询问这个集合的SG值(集合中的数字组合相加不能达到的最小值)是多少。

analyse:

这题方法很巧妙。

假设当前不能达到的最小值为v,对于要插入的一个新值x

1)如果x>v,那么v的值不会改变,我们用一个优先队列(从小到大)将x进队;

2)如果x<=v,那么v的值会改变为v+x,然后再判断队列中的元素,把队列中的元素当作新值x来处理,执行1、2操作,这样就能保证v一直是不能达到的最小值。

 

Time complexity: O(n)

 

Source code: 

 

//  Memory   Time //  1347K     0MS //   by : crazyacking //   2015-03-29-18.44 #include #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXN 1000010 #define LL long long using namespace std; priority_queue
,greater
> q; int main() { ios_base::sync_with_stdio(false); cin.tie(0); // freopen("C:\\Users\\Devin\\Desktop\\cin.cpp","r",stdin); // freopen("C:\\Users\\Devin\\Desktop\\cout.cpp","w",stdout); LL t; while(cin>>t) { LL v=0;// biggest num while(!q.empty()) q.pop(); while(t--) { LL type; cin>>type; if(type==1) // insert { LL num; cin>>num; if(num>v+1) { q.push(num); } else { v+=num; while(!q.empty()) { LL tmp=q.top(); if(tmp<=v+1) { v+=tmp; q.pop(); } else break; } } } else cout<
<
View Code

 

转载于:https://www.cnblogs.com/crazyacking/p/4376694.html

你可能感兴趣的文章
常用名词
查看>>
第一百三十四节,JavaScript,封装库--遮罩锁屏
查看>>
RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-新增锁定用户与解除锁定用户的功能...
查看>>
vue1.0 的过滤器
查看>>
EventCache表太大, 怎么办?
查看>>
Top 10 mistakes in Eclipse Plug-in Development
查看>>
Directx教程(23) 简单的光照模型(2)
查看>>
Java 并发性和多线程
查看>>
Python线程专题9:线程终止与挂起、实用工具函数
查看>>
Unity中关于作用力方式ForceMode的功能注解
查看>>
view生命周期的一个找父类的控件的方法
查看>>
物理读之LRU(最近最少被使用)的深入解析
查看>>
Python2.7升级到3.0 HTMLTestrunner报错解决方法
查看>>
建立Git版本库管理框架例子
查看>>
nginx防止部分DDOS攻击
查看>>
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字......
查看>>
number_format() 函数定义和用法
查看>>
Java8中聚合操作collect、reduce方法详解
查看>>
查看记录
查看>>
mybatis报ORA-00911: 无效字符
查看>>